我有一个嵌套对象,我不知道这个对象中的嵌套级别,现在我想将它的所有属性转换为prop.prop[0].prop
之类的路径,之后我应该将所有主题保存在数组中。
nested_obj = {
name: 'Saeid',
images: [ { format: 'jpg', id: 23 }, { format: 'png', id: 30 }],
ids: [ 2111, { id: [ 222, 'library'] } ]
}
paths_array = [ 'name', 'images[0].format', 'images[0].id', 'images[1].format', 'images[1].id' ]
我怎么能达到这个目标?
我有一个如下解决方案,它不适用于ids[1].id[0]
var make_path;
make_path = function(obj) {
var Deep;
Deep = function(o, paths, preKey) {
var arrayKey, i, j, k, keys, l, len, ref, v;
if (paths == null) {
paths = [];
}
if (Array.isArray(o)) {
for (i = j = 0, ref = o.length - 1; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {
if (typeof o[i] !== 'object') {
paths.push(preKey + "[" + i + "]");
Deep(o[i], paths, preKey);
} else {
console.log(o[i]);
arrayKey = preKey + "[" + i + "]";
Deep(o[i], paths, arrayKey);
}
}
} else if (o instanceof Object) {
keys = Object.keys(o);
for (v = l = 0, len = keys.length; l < len; v = ++l) {
k = keys[v];
if (typeof o[k] !== 'object') {
if (preKey != null) {
paths.push(preKey + "." + k);
} else {
paths.push(k);
}
}
Deep(o[k], paths, k);
}
}
return console.log(paths);
};
return Deep(obj);
};
答案 0 :(得分:0)
我经常使用NPM库dot-object
。它有一个简单的API,可用于序列化和反序列化为dot
字符串。它也可以在节点应用程序或浏览器中使用。