Javascript 按键顺序筛选json对象
我试图根据用户输入按键过滤嵌套的json对象,但键的数量可以是完全动态的。我还需要根据索引/深度进行搜索 例如,如果您使用此json:Javascript 按键顺序筛选json对象,javascript,json,Javascript,Json,我试图根据用户输入按键过滤嵌套的json对象,但键的数量可以是完全动态的。我还需要根据索引/深度进行搜索 例如,如果您使用此json: values = { 1: { 4: { 9: { ... }, 10: { ... } }, 7: { 12: { ... }, 15: { ... },
values = {
1: {
4: {
9: {
...
},
10: {
...
}
},
7: {
12: {
...
},
15: {
...
},
18: {
...
}
}
},
2: {
5: {
7: {
...
}
}
}
}
我希望得到以下结果:
search = [1]
result:
{
1: {
4: {
9: {
...
},
10: {
...
}
},
7: {
12: {
...
}
15: {
...
}
18: {
...
}
}
}
}
search = [1, 4]
result:
{
4: {
9: {
...
},
10: {
...
}
}
}
search = [1, 4, 9]
result:
{
9: {
...
}
}
search = [2, 5]
result:
{
5: {
7: {
...
}
}
}
我最初认为我可以直接使用result=values[2][5]
,但由于键和json在内容和深度上都是完全动态的,所以它不起作用
我尝试过使用过滤器,但它只在一个级别上起作用,因为我需要先知道前面的X个键
有人有什么想法吗
编辑
这被标记为这篇文章的副本,但这与我没有搜索整个对象以获得该键的第一个结果并不完全相同。键并不总是唯一的,例如,它们可能位于整个对象的其他位置,因此我需要按顺序遍历对象。对于JSON,您仍然可以使用数组。如果您想按索引进行选择,那么必须像这样编写JSON
[
[
{ 'key' : 'value' },
{ 'key' : 'value' }
],
[
{ 'key' : 'value' },
{ 'key' : 'value' }
]
],
[ ... ],
[ ... ]
假设JavaScript随后将此JSON分配给常量值
,那么您就可以使用语法值[0][1]
访问这些对象中的任何一个。这样,您就不必做任何额外的工作来使索引成为动态的,因为这是它们的标准行为
就动态深度而言,您可以使用handy编写一个简短的函数
或ES5,如果您愿意:
var search = function(searchArr, idxArr) {
var result = searchArr;
var exists = function() {
return idxArr.every(function (idx) {
return result = result[idx];
});
};
return exists() ? result : null;
};
查看上的示例。
result={5:values[2][5]}代码>?编写一个可以搜索单个键的函数。然后在输入数组上循环,根据上一次调用的结果调用它。当结果以5:
开头时,这意味着什么?这不是有效的Javascript语法,它需要位于对象内部,例如{5:…}
?@solarc,如果2
嵌套得更深入,则该语法将不起作用。你能发布你的尝试吗?我想你不明白这个问题。这是关于如何在对象中任意深度搜索一个键。是的,这不太正确,我不能更改jsonanyway@Onfire这是不是有点像你问的?
var search = function(searchArr, idxArr) {
var result = searchArr;
var exists = function() {
return idxArr.every(function (idx) {
return result = result[idx];
});
};
return exists() ? result : null;
};