[英]undefined is not an object(evaluating 'Object.keys(inboundState)')
[英]return Object.keys in a map got undefined
我下面的循环出了什么问题? 我想计算total_count并在映射内进行一些操作后返回[total,total],但是我不确定。
我的raw
数据
const raw = [{
"device_info": {
"name": "cam1",
},
"age_range": {
"0-10": {
"age_range": "0-10",
"total_count": 15,
"male_count": 6,
"female_count": 9
},
"11-20": {
"age_range": "11-20",
"total_count": 11,
"male_count": 7,
"female_count": 4
},
"21-30": {
"age_range": "21-30",
"total_count": 922,
"male_count": 452,
"female_count": 470
}
}
}, {
"device_info": {
"name": "cam2",
},
"age_range": {
"0-10": {
"age_range": "0-10",
"total_count": 1,
"male_count": 1,
"female_count": 0
},
"11-20": {
"age_range": "11-20",
"total_count": 2,
"male_count": 0,
"female_count": 2
},
"21-30": {
"age_range": "21-30",
"total_count": 90,
"male_count": 58,
"female_count": 32
}
}
}]
环
const x = raw.map(obj => {
return Object.keys(obj).forEach(key => {
let total = 0
if (key === 'age_range') {
total = Object.keys(obj.age_range).reduce((acum, innerKey) => {
return acum + obj.age_range[innerKey].total_count
}, 0)
console.log(total)
}
});
})
console.log('x', x)
Array#forEach
不返回任何内容,而是使用Array#map
和Object.values
:
const x = raw.map(obj => {
return Object.values(obj.age_range).reduce((acc, item) => acc + item.total_count, 0)
})
工作示例:
const raw = [{ "device_info": { "name": "cam1", }, "age_range": { "0-10": { "age_range": "0-10", "total_count": 15, "male_count": 6, "female_count": 9 }, "11-20": { "age_range": "11-20", "total_count": 11, "male_count": 7, "female_count": 4 }, "21-30": { "age_range": "21-30", "total_count": 922, "male_count": 452, "female_count": 470 } } }, { "device_info": { "name": "cam2", }, "age_range": { "0-10": { "age_range": "0-10", "total_count": 1, "male_count": 1, "female_count": 0 }, "11-20": { "age_range": "11-20", "total_count": 2, "male_count": 0, "female_count": 2 }, "21-30": { "age_range": "21-30", "total_count": 90, "male_count": 58, "female_count": 32 } } }] const x = raw.map(obj => Object.values(obj.age_range).reduce((acc, item) => acc + item.total_count, 0)) console.log(x)
您的问题是,raw.map返回来自Object.key(obj).forEach(...)的任何内容
但是对于每个仅仅是“迭代器”功能。 它实际上不返回任何东西。
请参阅: https : //developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
像这样更改。在第一个map
变量中定义总数,并从forEach
删除收益。ForEach不返回任何东西。仅在第一个地图内添加收益。
const raw = [{ "device_info": { "name": "cam1", }, "age_range": { "0-10": { "age_range": "0-10", "total_count": 15, "male_count": 6, "female_count": 9 }, "11-20": { "age_range": "11-20", "total_count": 11, "male_count": 7, "female_count": 4 }, "21-30": { "age_range": "21-30", "total_count": 922, "male_count": 452, "female_count": 470 } } }, { "device_info": { "name": "cam2", }, "age_range": { "0-10": { "age_range": "0-10", "total_count": 1, "male_count": 1, "female_count": 0 }, "11-20": { "age_range": "11-20", "total_count": 2, "male_count": 0, "female_count": 2 }, "21-30": { "age_range": "21-30", "total_count": 90, "male_count": 58, "female_count": 32 } } }] const x = raw.map(obj => { let total = 0 Object.keys(obj).forEach(key => { if (key === 'age_range') { total = Object.keys(obj.age_range).reduce((acum, innerKey) => { return acum + obj.age_range[innerKey].total_count }, 0) } }); return total }) console.log('x', x)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.