在 JSON 中查找键的值,而无需事先知道结构
find the value of a key in a JSON without knowing the structure in advance
我有以下JavaScript数据结构。 a[]
是一个以文本字符串作为元素的数组。它不是 事先知道它包含什么。例如
a = ["foo", "bar", "baz"...];
res{}
是一个 JSON 对象,其键数与"a"中的元素一样多,具有以下规则;res{}
的最内层键是具有以下规则的对象 称为 features[]
的数组或最后一个最内层键本身就是一个数组。因此,如果 ,则res
要么
// if
a = ["foo", "bar"];
// then
res = {
"foo": {
"bar": {
"features": []
}
}
};
// and I want
data = res["foo"]["bar"].features;
// or
res = {
"foo": {
"bar": []
}
};
// and I want
data = res["foo"]["bar"];
正如我所说,事先不知道a[]
有多长或其元素的值是多少。我该如何做到以上?
更新:修复了res
结构中的拼写错误
这工作正常
function getFeatures(obj, keys) {
if( keys.length ) {
key = keys.shift();
obj = obj[key];
return getFeatures(obj, keys);
} else {
return obj.features || obj;
}
}
你可能想用 keys-array 的副本来调用它,因为该函数将元素从它传递的数组中移出。
即var keys = ["foo", "bar"];
var res1 = { "foo": { "bar": { "features": [1, 2, 3] } } };
getFeatures(res1, keys.slice(0)); // => [1, 2, 3]
var res2 = { "foo": { "bar": ["a", "b", "c"] } };
getFeatures(res2, keys.slice(0)); // => ["a", "b", "c"]
我认为以下递归解决方案可以达到您的目的。
function doSomething(i) {
if (i==a.length)
return []; // can be made {features:[]}
var d = {}
d[a[i]] = doSomething(i+1);
return d;
}
doSomething(0);
初始设置为特征的替代迭代解决方案:
var a = ['foo', 'bar'];
var i = a.length -1;
var res,d={features:[]};
while(i >=0) {
res ={};
res[a[i]]=d;
d=res;
i--;
}
--V
相关文章:
- 更改JSON对象的结构
- 角度控制器结构
- 从键值结构中获取数据,并将其与AngularJS中ng重复的值进行比较
- 使用递归属性迭代保留属性结构
- 如何将我的json结构转换为C3.js所需的列结构
- 嵌套对象结构
- Redux应用程序结构-在哪里放置服务/业务逻辑
- 用于视频类型的MongoDB结构's
- javascript和php中的pancard结构验证
- 如何在砖石结构中订购DOM
- 如何解析结构不良的 html 代码
- 访问嵌套函数结构中的JavaScript父函数变量
- 为什么我们在ES2015中需要一个新的for循环结构,而我们已经有了for、forEach
- 从json对象聚集数据并创建层次结构
- 在我的目录结构中,将单元测试助手源文件放在哪里
- 当知道同一hiearch中至少有一个元素时,遍历到元素.结构使用jquery
- Html5-使用SVG路径绘制的组织层次结构在左手边被剪裁
- 布局/结构建议
- 无法使用Selenium创建本地windows目录结构
- 如何使用SnapSVG将SVG作为树结构遍历