数组过滤器方法不起作用

时间:2018-09-03 18:57:42

标签: javascript arrays

我正在尝试使用filter方法从基于索引的数组中删除项目,但是它不起作用。例如:filteredGroceries以下应返回[{"name":"Apples","completed":false},{"name":"231312"},{"name":"765656"}]。但这会返回杂货中的所有元素。
 我确定我犯了一个新手错误。
我究竟做错了什么?

var groceries= [{"name":"Apples","completed":false},{"name":"231312"},{"name":"454334"},{"name":"765656"}];
var indexToRemove=2;
var filteredGroceries = groceries.filter(item => item.index !== indexToRemove);   

5 个答案:

答案 0 :(得分:1)

您要传递的函数带有一个要过滤的参数,而如果您传递了两个参数,则第二个是索引:

var filteredGroceries = groceries.filter((item,index) => index !== indexToRemove);   

就目前而言,您正在访问数组中每个对象的'index'属性,该属性始终为undefined,因此所有元素都可以通过测试。

.filter的文档显示,要获取索引,您需要第二个参数:

var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])

答案 1 :(得分:1)

您没有定义index参数。

var groceries= [{"name":"Apples","completed":false},{"name":"231312"},{"name":"454334"},{"name":"765656"}];
var indexToRemove=2;
var filteredGroceries = groceries.filter((item, index) => index !== indexToRemove);

console.log(filteredGroceries);

答案 2 :(得分:1)

您的回调返回一个选项项目,它没有属性索引 添加其他参数

var groceries= [{"name":"Apples","completed":false},{"name":"231312"},{"name":"454334"},{"name":"765656"}];
var indexToRemove=2;
var filteredGroceries = groceries.filter((item, index) => index !== indexToRemove); 

答案 3 :(得分:1)

var filteredGroceries = groceries.filter((item, i) => i !== indexToRemove);

答案 4 :(得分:0)

var filteredGroceries = groceries.filter(item => item.index !== indexToRemove); 

此行从现有数组中制造出新数组,并且不返回其中具有索引键的元素/对象。考虑到您的对象数组不包含带有键索引的对象,因此可以返回整个数组。如果要从数组中消除第二个元素,则应使用groceries.splice(1,0)