Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript数组不过滤重复项_Javascript_Arrays_Filter_Duplicates - Fatal编程技术网

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