【发布时间】:2018-01-18 03:03:09
【问题描述】:
我的数组过滤器不起作用,我不确定哪一部分出错了。我的样本数据:
var arr = [
{accountID: '-KqIR-HT7orcPpe-lZa8', age: 31, gender: 'female'},
{accountID: '-KqIR-GvEpHFiPFZRxbG', age: 59, gender: 'female'},
{accountID: '-KqIR-GvEpHFiPFZRxbG', age: 59, gender: 'female'},
{accountID: '-KqIR-GvEpHFiPFZRxbG', age: 59, gender: 'female'},
{accountID: '-KqIR-GvEpHFiPFZRxbG', age: 59, gender: 'female'},
{accountID: '-KqIR-EKbN02zAfCRyoe', age: 24, gender: 'female'},
{accountID: '-KqIR-EKbN02zAfCRyoe', age: 24, gender: 'female'},
{accountID: '-KqIR-EKbN02zAfCRyoe', age: 24, gender: 'female'},
{accountID: '-KqIR-EKbN02zAfCRyoe', age: 24, gender: 'female'},
{accountID: '-KqIR-EKbN02zAfCRyoe', age: 24, gender: 'female'},
{accountID: '-KqIR-EKbN02zAfCRyoe', age: 24, gender: 'female}
];
我想过滤掉相同的 accountID。我在网上找到了这个解决方案:
arr = arr.filter( function( item, index, inputArray ) {
return inputArray.indexOf(item) == index;
});
当我尝试使用这个打印出过滤后的数组时:
for(var i = 0; i < arr.length; i++){
console.log(arr[i][0].accountID + ' ' + arr[i][0].age + ' ' + arr[i][0].gender);
}
我得到了完全相同的数组,但结果重复。哪一部分错了?谢谢!
【问题讨论】:
-
arr中的对象是否与inputArray中的对象相同(字面意思相同,结构不同)? -
在我看来,您的过滤功能实际上并没有做任何事情。原始数组的每个元素都会调用一次回调;对于每个元素,它还传入该元素的索引。元素的索引将始终等于自身,因此我希望过滤器返回每个项目。
-
@MinusFour 对不起,我认为 inputArray 只是函数的一个参数?在这种情况下,它是正确的?
-
@Amy 是的,它在 for 循环那部分打印出完全相同的数组
-
这些元素相等的条件是什么?
accountID相同或所有三个字段都相同。使用inputArray.indexOf(item) == index找不到重复项,因为数组中的每个对象都是唯一对象,即使它们具有相同的值。
标签: javascript arrays filter duplicates