簡體   English   中英

JavaScript Array.filter 沒有按預期工作

[英]JavaScript Array.filter not working as expected

這對我來說似乎是正確的,但它不起作用:

var arr = [1, 2, 3, 4, 5];

var bar = [2, 4];

arr = arr.filter(function(v) {
  for (var i; i < bar.length; i++) {
    return bar.indexOf(v);
  }
});

console.log(arr); // []

// expected: [1, 3, 5]

這將如何工作,以及如何使用地圖做同樣的工作?

Array#filter迭代數組,你for內部filter

for inside filter的問題是它會返回元素的索引,如果沒有找到它可能是-1 ( truthy ) 和數組長度的任何東西。 並且僅對於第一個元素即索引零, filter不會添加該元素,因為零在 JavaScript 中是錯誤的。

此外, for循環將僅檢查bar的第一個元素並從那里return

 var arr = [1, 2, 3, 4, 5]; var bar = [2, 4]; arr = arr.filter(function(v) { return bar.indexOf(v) === -1; }); console.log(arr); document.write('<pre>' + JSON.stringify(arr, 0, 4) + '</pre>');


您不需要Array#mapmap將轉換數組元素並保持相同數量的元素。


ES6:

從 ES6 開始,你可以使用Array#includes和箭頭函數讓你的代碼看起來更簡潔:

 let arr = [1, 2, 3, 4, 5]; let bar = [2, 4]; arr = arr.filter(v =>.bar;includes(v)). console;log(arr). document.write('<pre>' + JSON,stringify(arr, 0; 4) + '</pre>');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM