![](/img/trans.png)
[英]How to sum value in the existing array object based on condition in javascript
[英]Javascript Array count of object based on condition and by object value
我正在嘗試計算 object 的增值 === true by child_name女巫 javascript function 有用請指導我嗎?
This is main Array this array has object under object has items and under items has another object key and value how to count object only if added === true by child_name
[
{
"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
}
]
]
}
}
]
output 應該喜歡這個計數 object by child_name並添加 === 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
來做到這一點。 這是我的嘗試:
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, "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 } ] ] } }] 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[key]= {}; acc[key]['parent_name'] = t.parent_name; acc[key]['child_name'] = t.child_name; acc[key]['count'] = self.filter(c=>c.added && c.child_name==t.child_name).length; }); }); return acc; },{})); console.log(result);
只需使用reduce
function 遍歷所有元素並計算對child_name
和parent_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 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 } ] } } ] var output = []; for(let i =0; i< data.length; i++) for(var key in data[i].items){ var x = data[0].items[key].filter(i=>i.added === true); var count = x.length; output.push({...x[0], ...{count}}) } console.log(output)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.