我有一个具有三个级别的JSON,并且将其存储为数组,我需要获取第二个级别(从0开始计数),并且每个级别中的10个以下元素。如何在JavaScript上实现它。需要您的帮助。所有回复都会有所帮助。
ps。某些第一级和第二级元素可以为空
[
{
"name": "0th level first", //0th level
"options": [
{
"name": "1st level Cafe", // 1st level
"options": [
{
"name": "2nd level Staff", //2nd level
"options": [
{
"name": "Gary", //3rd level
"age": 18
},
{
"name": "James", //3rd level
"age": 25
}
]
}
]
}
]
}
]
答案 0 :(得分:0)
假设data
包含您的json,我们有2位在线用户:
let out = data[0].options[0].options[0];
let outArr = data.flatMap(x=>x.options.flatMap(y=>y.options));
结果
// out = {"name":"2nd level Staff","options":[{"name":"Gary","age":18},{"name":"James","age":25}]}
// outArr = [{"name":"2nd level Staff","options":[{"name":"Gary","age":18},{"name":"James","age":25}]}]
第一个(out
)包含一个第二个元素。我们在此处使用树索引(三个零),首先data[0]
返回数组数据中的第一个元素,然后options[0]
返回选项数组中的第一个元素。
第二个解决方案(outArr
)包含所有第二个元素的数组。我们在这里使用JS flatMap
写第二种解决方案启发了我 abdullahkady 在问题下方的评论。
答案 1 :(得分:0)
可能是这个吗? :)
data.forEach((value, index) => {
for(stage0 in value){
if(typeof value[stage0] === 'object'){
value[stage0].forEach((val, index) => {
for(stage1 in val){
if(typeof val[stage1] === 'object'){
val[stage1].forEach((val2, index) => {
for(stage2 in val2){
console.log(val2[stage2]);
}
})
}
}
})
}
}
})
答案 2 :(得分:0)
您可以使用array.forEach,它将仅遍历每个级别。
在第一个循环上有一个属性调用options,它是一个数组,您需要在0级别循环遍历options数组,在第二个循环上再来一个另外的options数组,您需要再次遍历options数组1级。 那么您将达到输出的三级水平。
第三级意味着从零开始,第二级。
我希望这能解决问题。
var data = [
{
"name": "0th level first", //0th level
"options": [
{
"name": "1st level Cafe", // 1st level
"options": [
{
"name": "2nd level Staff", //2nd level
"options": [
{
"name": "Gary", //3rd level
"age": 18
},
{
"name": "James", //3rd level
"age": 25
}
]
}
]
}
]
}
]
data.forEach(fl => {
fl.options.forEach(sl => {
sl.options.forEach(tl => {
console.log("second level starting from 0",tl)
})
})
})