使用 javascript/jquery 在嵌套 json 中访问未知父对象的子对象



我有一个嵌套的JSON对象。

我不知道父级在嵌套 JSON 对象中的位置。

我知道我尝试访问的父项的属性值。

我需要根据数组中的项目访问索引 = 0 或 3 或 2 等的行对象。

如果数组包含 0,3,那么我想访问索引属性为 0 的行对象的单元格对象,然后访问索引属性为 3 的行对象的单元格对象。

行对象中最顶层的项可能不包含 0 的索引属性。

尽管我知道属性的值,但我不会知道行对象的位置。

我也不想使用 foreach 循环访问行集合。

我想知道是否有办法在不使用循环的情况下实现。

我正在尝试在没有循环的情况下执行此操作,如果不可能,那么我可能不得不考虑使用 for loop/foreach 作为最后一个选项。

data.rows[x].index=0
data.rows[y].index=3

在这里我不知道 x 和 y,但我知道 data.rows[x] 和 data.rows[y] 的索引属性值

var data ={
"name":"Members",
"rows":[
{
"index":3,
"cells":[
{
"value":"Name",
"color":"#000000",
"enable":false,
"index":0
},
{
"value":"ID",
"color":"#000000",
"enable":false,
"index":1
},
{
"value":"Total",
"color":"#000000",
"enable":false,
"index":2
},
{
"value":"Dec2019_Data",
"index":3
},
{
"value":"Jan2020_Data",
"index":4
}
]
},
{
"index":2,
"cells":[
{
"value":"NewMember",
"color":"#000000",
"enable":false,
"index":0
},
{
"value":240,
"color":"#000000",
"enable":false,
"index":1
},
{
"value":200,
"color":"#000000",
"enable":false,
"index":2
},
{
"value":100,
"color":"#000000",
"enable":false,
"index":3
},
{
"value":100,
"color":"#000000",
"enable":false,
"index":4
}
]
},
{
"index":0,
"cells":[
{
"value":"Timo (718)",
"color":"#000000",
"enable":false,
"index":0
},
{
"value":150,
"color":"#000000",
"enable":false,
"index":1
},
{
"value":400,
"color":"#000000",
"enable":false,
"index":2
},
{
"value":300,
"color":"#000000",
"enable":false,
"index":3
},
{
"value":100,
"color":"#000000",
"enable":false,
"index":4
}
]
},
{
"index":1,
"cells":[
{
"color":"#000000",
"enable":false,
"index":0
},
{
"color":"#000000",
"enable":false,
"index":1
},
{
"color":"#000000",
"enable":false,
"index":2
},
{
"color":"#000000",
"enable":false,
"index":3
},
{
"color":"#000000",
"enable":false,
"index":4
}
]
}
]
}

我找到了一种基于索引获取行的方法

var jsonArray = [];
var rowCollection = data.rows;
var uniqRows=[0,3,2];
var ChangedRows=[];
ChangedRows= $.map(rowCollection, function(val, key) {
if (uniqRows.indexOf(val.index) > -1)
return val;
});

ChangedRows.sort(function(a, b){
return a.index-b.index
})
var rowCount = uniqRows.length;
for (var i = 0; i < rowCount ; i++) {


var objs=ChangedRows[i].cells;

objs = objs.map(function (obj) {
return { value: obj.value };
});
jsonArray.push(JSON.stringify(objs, null, 2));}

最新更新