JavaScript数组不过滤重复项
我的阵列过滤器不工作,我不确定哪部分出错。我的样本数据:JavaScript数组不过滤重复项,javascript,arrays,filter,duplicates,Javascript,Arrays,Filter,Duplicates,我的阵列过滤器不工作,我不确定哪部分出错。我的样本数据: var arr = [ {accountID: '-KqIR-HT7orcPpe-lZa8', age: 31, gender: 'female'}, {accountID: '-KqIR-GvEpHFiPFZRxbG', age: 59, gender: 'female'}, {accountID: '-KqIR-GvEpHFiPFZRxbG', age: 59, gender: 'female'}, {
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}
];
我想筛选出相同的帐户ID。我在网上找到了这个解决方案:
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);
}
for(变量i=0;i
我得到了完全相同的数组和重复的结果。哪一部分错了?谢谢 在ES2015中,您可以使用存储任何类型的唯一值 以下示例使用循环数组中的每个值,并将唯一值添加到辅助数组
uniq
。请注意,您需要对数组中的对象进行字符串化
和解析
var arr=[{accountID:'-KqIR-HT7orcPpe-lZa8',年龄:31岁,性别:{accountID:'-KqIR-GvEpHFiPFZRxbG',年龄:59岁,性别:{accountID:'-KqIR-GvEpHFiPFZRxbG',年龄:59岁,性别:{accountID:'-KqIR-GvEpHFiPFZRxbG',年龄:59岁,性别:
“女性”},{accountID:'-KqIR gveffifzrxbg',年龄:59岁,性别:{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:'-femal'},{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:
'女性'},{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:'female'},{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:'female'},{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:'female'};
var uniq=新集合();
arr.forEach(e=>uniq.add(JSON.stringify(e));
var res=Array.from(uniq.map)(e=>JSON.parse(e));
控制台日志(res)代码>在ES2015中,您可以使用存储任何类型的唯一值
以下示例使用循环数组中的每个值,并将唯一值添加到辅助数组uniq
。请注意,您需要对数组中的对象进行字符串化
和解析
var arr=[{accountID:'-KqIR-HT7orcPpe-lZa8',年龄:31岁,性别:{accountID:'-KqIR-GvEpHFiPFZRxbG',年龄:59岁,性别:{accountID:'-KqIR-GvEpHFiPFZRxbG',年龄:59岁,性别:{accountID:'-KqIR-GvEpHFiPFZRxbG',年龄:59岁,性别:
“女性”},{accountID:'-KqIR gveffifzrxbg',年龄:59岁,性别:{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:'-femal'},{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:
'女性'},{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:'female'},{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:'female'},{accountID:'-KqIR-EKbN02zAfCRyoe',年龄:24岁,性别:'female'};
var uniq=新集合();
arr.forEach(e=>uniq.add(JSON.stringify(e));
var res=Array.from(uniq.map)(e=>JSON.parse(e));
控制台日志(res)代码>使用findIndex
,因为这些对象都不同
var-arr=[{
帐户ID:'-KqIR-HT7orcPpe-lZa8',
年龄:31岁,
性别:'女性'
},
{
帐户ID:'-KqIR GVEPHFPFZRXBG',
年龄:59,
性别:'女性'
},
{
帐户ID:'-KqIR GVEPHFPFZRXBG',
年龄:59,
性别:'女性'
},
{
帐户ID:'-KqIR GVEPHFPFZRXBG',
年龄:59,
性别:'女性'
},
{
帐户ID:'-KqIR GVEPHFPFZRXBG',
年龄:59,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
}
];
arr=arr.filter(函数(项、索引、输入阵列){
返回inputArray.findIndex(el=>el.accountID==item.accountID)==index;
});
控制台日志(arr)代码>使用findIndex
,因为这些对象都不同
var-arr=[{
帐户ID:'-KqIR-HT7orcPpe-lZa8',
年龄:31岁,
性别:'女性'
},
{
帐户ID:'-KqIR GVEPHFPFZRXBG',
年龄:59,
性别:'女性'
},
{
帐户ID:'-KqIR GVEPHFPFZRXBG',
年龄:59,
性别:'女性'
},
{
帐户ID:'-KqIR GVEPHFPFZRXBG',
年龄:59,
性别:'女性'
},
{
帐户ID:'-KqIR GVEPHFPFZRXBG',
年龄:59,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
},
{
帐户ID:'-KqIR-EKbN02zAfCRyoe',,
年龄:24岁,
性别:'女性'
}
];
arr=arr.filter(函数(项、索引、输入阵列){
返回inputArray.findIndex(el=>el.accountID==item.accountID)==index;
});
控制台日志(arr)
中的对象是否与inputArray
中的对象相同(字面上相同,结构上不相同)?在我看来,您的筛选函数实际上没有做任何事情。对原始数组的每个元素调用一次回调;对于每个元素,它还传入该元素的索引。元素的索引将始终等于自身,因此我希望每个项都由过滤器返回。@对不起,但我认为inputArray只是函数的一个参数?在这种情况下,它是arr,对吗?@Amy,是的,它在for循环中打印出了完全相同的数组,那部分是什么条件使这些元素相等?accountID
与