I have the following structure in 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": []
}
]
}
I need to create an array containing the id of all comments, including answers type comments
The end should look like this
[1, 2, 3, 5, 30, 99, 103]
Can I just use map
, reduce
and filter
?
What can I try next?
If you can also use 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]
Otherwise, just using map
and 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]
You can achieve your required output using Spread_syntax
/ concat
reduce
, map
and sort
method of array.
Please have a look into below code snippet:
ES6
var obj = {"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":[]}]}; let result = obj.comments.reduce((r,o)=>[...r, o.id,...o.answers.map(v=>v.id)],[]); console.log(result.sort((a,b)=> ab));
ES5
var 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":[]}]}; //This function will return the all id's from the passed array as per above object data. function getIDs(obj) { var result = obj.comments.reduce(function(res, item) { var answers = item.answers.map(function(ans) { return ans.id; }); res.push(item.id);//Adding id in array from main list return res.concat(answers);//Using contact method for add both arrays values }, []); return result.sort(function(a, b) { return a - b; }); } console.log(getIDs(data));
try this code
your JSON: data__ = {... }
let result = []
let innerObjs = []
for (let i = 0; i < data__.comments.length; i++){
let obj = data__.comments[i].id
result.push(obj)
innerObjs.push(data__.comments[i].answers)
}
for(let a = 0; a < innerObjs.length; a ++){
let answers = innerObjs[a]
for(let j =0; j < answers.length; j++){
let ans = answers[j]
if(ans)
result.push(ans.id)
}
}
console.log(result)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.