在JavaScript中的多维JSON对象的不同级别上查找重复值
我有一个JSON对象(stringized)在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
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”}{