2017-06-23 42 views
0

此JavaScript代碼嘗試使用array.filter以取得更好的性能,而不是for循環「I guess」。無論如何,結果並不相同,當它預期會是。 它試圖找出包含在searchWords陣列中的students的名稱。
任何想法,爲什麼?THX將for循環轉換爲數組過濾器

let searchWords = ['john','matt','marry']; 
 
let students = ['matt','jack']; 
 
let names = []; 
 
for (let i = 0; i < searchWords.length; i++) { 
 
    if (students.indexOf(searchWords[i]) !== -1) { 
 
     names.push(searchWords[i]); 
 
    } 
 
} 
 
console.log(names.length); // => 1 "correct" 
 

 
names = []; 
 
names = searchWords.filter(x => students.filter(y => students.indexOf(x) !== -1)); 
 
console.log(names.length); // => 3 "incorrect"

回答

3

過濾線基本上已經增加了一個循環。它應該是

names = searchWords.filter(x => students.indexOf(x) !== -1); 
+0

我只是回答說...... ;-) – RobG

+0

自從我上次使用它以來,哇哇已經改變了。現在我們有'let'和lambda函數。涼。 – 0x499602D2

+0

@ 0x499602D2 - 它總是有lambda函數,箭頭語法雖然是新的(它設置* this *詞法而不是在調用中)。 – RobG