Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.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中的多维JSON对象的不同级别上查找重复值_Javascript_Arrays_Json_Multidimensional Array_Duplicates - Fatal编程技术网

在JavaScript中的多维JSON对象的不同级别上查找重复值

在JavaScript中的多维JSON对象的不同级别上查找重复值,javascript,arrays,json,multidimensional-array,duplicates,Javascript,Arrays,Json,Multidimensional Array,Duplicates,我有一个JSON对象(stringized)getResponse[“taskData”]例如: [ {标题:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”}, {标题:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”}, {标题:“qwerty”,startOn:“1-5-2019-16-30”,endOn:“1-5-2019-19-0”}, {标题:“asdfgh

我有一个JSON对象(stringized)
getResponse[“taskData”]
例如:

[
{标题:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”},
{标题:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”},
{标题:“qwerty”,startOn:“1-5-2019-16-30”,endOn:“1-5-2019-19-0”},
{标题:“asdfgh”,startOn:“1-5-2019-16-30”,endOn:“1-5-2019-19-0”},
{标题:“zxcvbn”,startOn:“2-5-2019-9-0”,endOn:“2-5-2019-11-0”}
]
我需要知道多维对象的不同级别上有多少个startOn值的副本

例如,获得
30-4-2019-18-0(2),1-5-2019-16-30(2)
对我来说是有用的。或者,获取相应副本的索引整数也会有所帮助

我一直在尝试通过以下方式实现此功能:

var countSameStart={};
getResponse[“taskData”].forEach(函数(x){
countSameStart[x]=(countSameStart[x]| | 0)+1;
});
但是,后来我发现这个函数无法访问对象的不同级别并比较这些值。而且,我也不能把我的心思放在它上面


我很欣赏任何有建设性的回答,如代码或建议。

您可以使用array reduce并创建一个对象,其中键将是
startOn
&其值将是一个对象数组。然后,您可以获取该键值并使用length来获取具有相同
startOn

let数据=[{
标题:“123456”,
startOn:“30-4-2019-18-0”,
endOn:“30-4-2019-19-0”
},
{
标题:“123456”,
startOn:“30-4-2019-18-0”,
endOn:“30-4-2019-19-0”
},
{
标题:“qwerty”,
startOn:“1-5-2019-16-30”,
endOn:“1-5-2019-19-0”
},
{
标题:“asdfgh”,
startOn:“1-5-2019-16-30”,
endOn:“1-5-2019-19-0”
},
{
标题:“ZxCVN”,
斯塔顿:“2-5-2019-9-0”,
endOn:“2-5-2019-11-0”
}
]
设k=data.reduce(函数(acc,curr){
如果(根据[当前startOn]){
acc[当前startOn].推送(当前)
}否则{
acc[当前startOn]=[当前]
}
返回acc;
}, {});

console.log(k[“30-4-2019-18-0”].length)
您可以使用array reduce创建一个对象,其中键将是
startOn
&其值将是一个对象数组。然后,您可以获取该键值并使用length来获取具有相同
startOn

let数据=[{
标题:“123456”,
startOn:“30-4-2019-18-0”,
endOn:“30-4-2019-19-0”
},
{
标题:“123456”,
startOn:“30-4-2019-18-0”,
endOn:“30-4-2019-19-0”
},
{
标题:“qwerty”,
startOn:“1-5-2019-16-30”,
endOn:“1-5-2019-19-0”
},
{
标题:“asdfgh”,
startOn:“1-5-2019-16-30”,
endOn:“1-5-2019-19-0”
},
{
标题:“ZxCVN”,
斯塔顿:“2-5-2019-9-0”,
endOn:“2-5-2019-11-0”
}
]
设k=data.reduce(函数(acc,curr){
如果(根据[当前startOn]){
acc[当前startOn].推送(当前)
}否则{
acc[当前startOn]=[当前]
}
返回acc;
}, {});

console.log(k[“30-4-2019-18-0”].length)
您可以创建一个函数,该函数接受属性,即
startOn
和值。如果prop与给定值匹配,则在数组上使用
forEach
,然后将其索引推送到result对象

const arr=[{title:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”},{title:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”,endOn:“1-5-2019-16-30”,endOn:“1-5-2019-19-0”},{title:“asdfgh”,startOn:“1-5-2019-16-30”,endOn:“1-5-2019-19-0”,endOn:“VB2-2019-Z9-0”,endOn:“2-5-2019-11-0”}]
功能DUP(arr、键、val){
设res=[];
arr.forEach((x,i)=>{
如果(x[键]==val)恢复推送(i);
})
返回res;
}

console.log(DUP(arr,'startOn','30-4-2019-18-0'))
您可以创建一个函数,该函数接受属性,即
startOn
和值。如果prop与给定值匹配,则在数组上使用
forEach
,然后将其索引推送到result对象

const arr=[{title:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”},{title:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”,endOn:“1-5-2019-16-30”,endOn:“1-5-2019-19-0”},{title:“asdfgh”,startOn:“1-5-2019-16-30”,endOn:“1-5-2019-19-0”,endOn:“VB2-2019-Z9-0”,endOn:“2-5-2019-11-0”}]
功能DUP(arr、键、val){
设res=[];
arr.forEach((x,i)=>{
如果(x[键]==val)恢复推送(i);
})
返回res;
}

log(dups(arr,'startOn','30-4-2019-18-0'))
假设您有一个带有数组的对象,那么您可以获取值并迭代数组,并获取所需密钥的计数

var getResponse={taskData:[{title:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”},{title:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”,endOn:“1-5-2019-19-0”,endOn:“1-5-2019-19-0”,endOn:“asdfgh-1-5-16-30”,endOn:“1-5-2019-19-2019-19,{-19-19}”,startOn:“2-5-2019-9-0”,endOn:“2-5-2019-11-0”,其他数据:[标题:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”,标题:“qwerty”,startOn:“1-5-2019-16-30”,endOn:“1-5-2019-19-0”,标题:“asdfgh”,startOn:“1-5-2019-16-30”,endOn:“1-5-2019-19-0”},
键='startOn',
count=Object.values(getResponse).reduce(
(c,a)=>(a.forEach({[key]:item})=>c[item]=(c[item]| | 0)+1),c),
Object.create(空)
);

控制台日志(计数)假设您有一个带有数组的对象,那么您可以获取值并迭代数组并获取所需密钥的计数

var getResponse={taskData:[{title:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”},{title:“123456”,startOn:“30-4-2019-18-0”,endOn:“30-4-2019-19-0”}{