对象尚未被读取 node.js
2018-04-27
47
我有一个对象
db_parsed
当我运行
console.log(JSON.stringify(db_parsed, null, 4))
结果是:
{
"data": [
[
{
"name": "Me",
"age": 23,
"sex": "M"
},
{
"name": "Wonderwoman",
"age": 22,
"sex": "F"
}
],
[
{
"name": "ALbert The Man",
"age": 22,
"sex": "M"
}
],
[
{
"name": "Leonard Johnson",
"age": 23,
"sex": "M"
}
]
]
}
但是当我运行
console.log(db_parsed.data.filter(obj => obj.age === 22))
结果是
[]
为什么?我遗漏了什么?我该如何解决这个问题?
2个回答
db_parsed.data
是一个包含
数组
的数组。
第二级数组包含对象。
您的过滤器代码试图处理这些对象,并且直接位于
db_parsed.data
内,而不是位于
db_parsed.data[0]
、
db_parsed.data[1]
和
db_parsed.data[2]
内。
您可以使用
reduce
将所有第二级数组连接成一个,然后对其进行过滤。
var db_parsed = {
"data": [
[{
"name": "Me",
"age": 23,
"sex": "M"
},
{
"name": "Wonderwoman",
"age": 22,
"sex": "F"
}
],
[{
"name": "ALbert The Man",
"age": 22,
"sex": "M"
}],
[{
"name": "Leonard Johnson",
"age": 23,
"sex": "M"
}]
]
};
console.log(db_parsed.data.reduce((a,b) => a.concat(b), []).filter(obj => obj.age === 22))
Quentin
2018-04-27
您可以执行
[].concat.apply([], db_parsed.data)
然后过滤对象数组:
const db_parsed = {"data": [[{"name": "Me","age": 23,"sex": "M"},{"name": "Wonderwoman","age": 22,"sex": "F"}],[{"name": "ALbert The Man","age": 22,"sex": "M"}],[{"name": "Leonard Johnson","age": 23,"sex": "M"}]]};
const result = [].concat.apply([], db_parsed.data).filter(obj => obj.age === 22);
console.log(result);
Yosvel Quintero
2018-04-27