基于条件和对象值的对象Javascript数组计数
我正在尝试通过child\u name计算对象已添加值===true是否javascript函数有用请指导我 这是主数组此数组在“对象有项目”下有对象,在“项目”下有另一个对象键和值仅当added===truebychild\u name基于条件和对象值的对象Javascript数组计数,javascript,arrays,object,Javascript,Arrays,Object,我正在尝试通过child\u name计算对象已添加值===true是否javascript函数有用请指导我 这是主数组此数组在“对象有项目”下有对象,在“项目”下有另一个对象键和值仅当added===truebychild\u name [ { "id": 38, "items": { "Big Box": [ [ { "id": 1153, "parent_name": "Bi
[
{
"id": 38,
"items": {
"Big Box": [
[
{
"id": 1153,
"parent_name": "Big Box",
"child_name": "",
"added": true
}
],
[
{
"id": 1153,
"parent_name": "Big Box",
"child_name": "",
"added": false
}
],
[
{
"id": 1153,
"parent_name": "Big Box",
"child_name": "",
"added": true
}
]
]
}
},
{
"id": 37,
"items": {
"Drawers": [
[
{
"id": 1108,
"parent_name": "Drawers",
"child_name": "Small "
},
{
"id": 1109,
"parent_name": "Drawers",
"child_name": "Medium",
"added": true
},
{
"id": 1110,
"parent_name": "Drawers",
"child_name": "Large"
}
]
],
"Mirror": [
[
{
"id": 1141,
"parent_name": "Mirror",
"child_name": "Large",
"added": false
},
{
"id": 1142,
"parent_name": "Mirror",
"child_name": "Small",
"added": true
},
{
"id": 1143,
"parent_name": "Mirror",
"child_name": "Medium",
"added": false
}
],
[
{
"id": 1141,
"parent_name": "Mirror",
"child_name": "Large"
},
{
"id": 1142,
"parent_name": "Mirror",
"child_name": "Small"
},
{
"id": 1143,
"parent_name": "Mirror",
"child_name": "Medium",
"added": true
}
]
],
"Stand": [
[
{
"id": 1145,
"parent_name": "Stand",
"child_name": "",
"added": true
}
],
[
{
"id": 1145,
"parent_name": "Stand",
"child_name": "",
"added": true
}
],
[
{
"id": 1145,
"parent_name": "Stand",
"child_name": "",
"added": true
}
]
]
}
}
]
[
{
"parent_name":"Big Box",
"child_name":"",
"count":2
},
{
"parent_name":"Drawers",
"child_name":"Medium",
"count":1
},
{
"parent_name":"Mirror",
"child_name":"Small",
"count":1
},
{
"parent_name":"Mirror",
"child_name":"Medium",
"count":1
},
{
"parent_name":"Stand",
"child_name":"",
"count":3
}
]
输出应该通过child\u name和added===true
[
{
"id": 38,
"items": {
"Big Box": [
[
{
"id": 1153,
"parent_name": "Big Box",
"child_name": "",
"added": true
}
],
[
{
"id": 1153,
"parent_name": "Big Box",
"child_name": "",
"added": false
}
],
[
{
"id": 1153,
"parent_name": "Big Box",
"child_name": "",
"added": true
}
]
]
}
},
{
"id": 37,
"items": {
"Drawers": [
[
{
"id": 1108,
"parent_name": "Drawers",
"child_name": "Small "
},
{
"id": 1109,
"parent_name": "Drawers",
"child_name": "Medium",
"added": true
},
{
"id": 1110,
"parent_name": "Drawers",
"child_name": "Large"
}
]
],
"Mirror": [
[
{
"id": 1141,
"parent_name": "Mirror",
"child_name": "Large",
"added": false
},
{
"id": 1142,
"parent_name": "Mirror",
"child_name": "Small",
"added": true
},
{
"id": 1143,
"parent_name": "Mirror",
"child_name": "Medium",
"added": false
}
],
[
{
"id": 1141,
"parent_name": "Mirror",
"child_name": "Large"
},
{
"id": 1142,
"parent_name": "Mirror",
"child_name": "Small"
},
{
"id": 1143,
"parent_name": "Mirror",
"child_name": "Medium",
"added": true
}
]
],
"Stand": [
[
{
"id": 1145,
"parent_name": "Stand",
"child_name": "",
"added": true
}
],
[
{
"id": 1145,
"parent_name": "Stand",
"child_name": "",
"added": true
}
],
[
{
"id": 1145,
"parent_name": "Stand",
"child_name": "",
"added": true
}
]
]
}
}
]
[
{
"parent_name":"Big Box",
"child_name":"",
"count":2
},
{
"parent_name":"Drawers",
"child_name":"Medium",
"count":1
},
{
"parent_name":"Mirror",
"child_name":"Small",
"count":1
},
{
"parent_name":"Mirror",
"child_name":"Medium",
"count":1
},
{
"parent_name":"Stand",
"child_name":"",
"count":3
}
]
只需使用
reduce
函数和计数对child\u name
和parent\u name
const res = arr.reduce((agg, v) => {
for(const key in v.items) {
if (!Array.isArray(v.items[key])) continue
v.items[key].forEach(v => v.forEach(v => {
if (typeof v !== 'object') return
const value = {
parent_name: v.parent_name,
child_name: v.child_name,
count: 1
}
const key = JSON.stringify(value)
if (!agg[key])
agg[key] = value
else
agg[key].count++
}))
}
return agg
}, {})
console.log(Object.values(res))
首先,请注意,
“Big Box”
等项是数组中的数组。您可能希望简单地将其设置为对象数组并执行以下操作:
var数据=[
{
“id”:38,
“项目”:{
“大盒子”:[
{
“id”:1153,
“家长姓名”:“大盒子”,
“儿童姓名”:“,
“添加”:正确
},
{
“id”:1153,
“家长姓名”:“大盒子”,
“儿童姓名”:“,
“已添加”:错误
},
{
“id”:1153,
“家长姓名”:“大盒子”,
“儿童姓名”:“,
“添加”:正确
}
]
}
}
]
var输出=[];
for(设i=0;ii.added==true);
var计数=x.length;
push({…x[0],…{count}})
}
console.log(输出)
您可以使用reduce
执行此操作。以下是我的尝试:
var data=[{“id”:38,“items”:{“Big Box”:[[{“id”:1153,“parent_name”:“Big Box”,“child_name”:““added”:true}],{“id”:1153,“parent_name”:“Big Box”,“child_name”:“added”:false}],{“id”:1153,“parent_name”:“Big Box”,“child_name”:“,“added”:true}],{“id”:37,“items”:“{“Drawers”:[{“id”:1108,“家长姓名”:“抽屉”、“孩子姓名”:“小”}、{“id”:1109、“家长姓名”:“抽屉”、“孩子姓名”:“中”;“添加”:true}、{“id”:1110,“家长姓名”:“抽屉”、“孩子姓名”:“大”}],“镜像”:[[[{“id”:1141,“家长姓名”:“镜像”、“孩子姓名”:“大”;“添加”:false}、{“id”:1142,“家长姓名”:“镜像”、“孩子姓名”:”小的,添加的:真的,{id:1143,“父母的名字”:“镜像”,“孩子的名字”:“中的”,“添加的”:假的,{id:1141,“父母的名字”:“镜像”,“孩子的名字”:“大的”},{id:1142,“父母的名字”:“镜像”,“孩子的名字”:“小的”{id:1143,“父母的名字”:“镜像”,“孩子的名字”:“中的”,“添加的”:真的],“看台”:[{“id:1145,”家长姓名“:“看台”、“孩子姓名”:“,”添加“:”真“,”{“id”:1145,“家长姓名“:”看台“,”孩子姓名“:”,“,”添加“:”真“,”{“id”:1145,“家长姓名“:”看台“,”孩子姓名“:”,“添加“:”真“]}]
var result=Object.values(data.reduce((acc,{items})=>{
Object.values(items).forEach(values=>{
values.flat().filter(g=>g.added).forEach((t,i,self)=>{
key=`${t.parent_name}${t.child_name}`
acc[键]={};
acc[key]['parent_name']=t.parent_name;
acc[key]['child_name']=t.child_name;
acc[key]['count']=self.filter(c=>c.added&&c.child\u name==t.child\u name).length;
});
});
返回acc;
},{}));
console.log(result);
您试图解决此问题的方法是什么?请参阅了解如何提出好问题。