我在json / javascript中具有以下结构
{
"comments": [
{
"id": 1,
"content": "lorem ipsum",
"answers": []
},
{
"id": 2,
"content": "lorem ipsum",
"answers": [
{
"id": 30,
"content": "lorem ipsum"
}
]
},
{
"id": 3,
"content": "lorem ipsum",
"answers": [
{
"id": 99,
"content": "lorem ipsum"
},
{
"id": 103,
"content": "lorem ipsum"
}
]
},
{
"id": 5,
"content": "comment",
"answers": []
}
]
}
我需要创建一个包含所有评论的ID的数组,包括答案类型的评论
最终应该看起来像这样
[1, 2, 3, 5, 30, 99, 103]
注:我可以只使用map
,reduce
并filter
谁能帮我这个?
提前致谢
如果还可以使用flat
:
const data = {comments:[{id:1,content:"lorem ipsum",answers:[]},{id:2,content:"lorem ipsum",answers:[{id:30,content:"lorem ipsum"}]},{id:3,content:"lorem ipsum",answers:[{id:99,content:"lorem ipsum"},{id:103,content:"lorem ipsum"}]},{id:5,content:"comment",answers:[]}]};
function findIds(obj) {
return obj.comments.map(com => {
return [ com.id, ...com.answers.map(ans => ans.id) ]
})
.flat()
.sort((a, b) => a - b);
}
console.log( findIds(data) ); // [1,2,3,5,30,99,103]
否则,只需使用map
和reduce
:
const data = {comments:[{id:1,content:"lorem ipsum",answers:[]},{id:2,content:"lorem ipsum",answers:[{id:30,content:"lorem ipsum"}]},{id:3,content:"lorem ipsum",answers:[{id:99,content:"lorem ipsum"},{id:103,content:"lorem ipsum"}]},{id:5,content:"comment",answers:[]}]};
function findIds(obj) {
return obj.comments.reduce((res, com) => {
return [ ...res, com.id, ...com.answers.map(ans => ans.id) ]
}, [])
.sort((a, b) => a - b);
}
console.log( findIds(data) ); // [1,2,3,5,30,99,103]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句