在这个stackoverflow线程中,我了解到你可以通过简单的字符串获取对象路径。
Accessing nested JavaScript objects with string key
考虑以下事项:
var person = { name: "somename", personal: { weight: "150", color: "dark" }};
var personWeight = deep_value(person,"personal.weight");
我试图从我的'person'对象构造一个不属于'object'类型的对象值数组。
因此数组看起来像:
[['name', []],['personal.weight', []],['personal.color', []]];
我希望他们能够以这种形式看待,因为我将继续使用它。
这就是我尝试过的:
var toIterate = { name: "somename", personal: { age: "19", color: "dark" } }
var myArray = [];
$.each(toIterate, recursive);
function recursive(key, value) {
if (key !== null) {
myArray.push([key, []]);
}
else {
$.each(value, recursive);
}
}
console.log(myArray);
答案 0 :(得分:8)
只需使用递归来遍历对象。
var person = {
name: "somename",
personal: {
weight: "150",
color: "dark",
foo: {
bar: 'bar',
baz: 'baz'
},
empty: {
}
}
};
// however you want to do this
var isobject = function(x){
return Object.prototype.toString.call(x) === '[object Object]';
};
var getkeys = function(obj, prefix){
var keys = Object.keys(obj);
prefix = prefix ? prefix + '.' : '';
return keys.reduce(function(result, key){
if(isobject(obj[key])){
result = result.concat(getkeys(obj[key], prefix + key));
}else{
result.push(prefix + key);
}
return result;
}, []);
};
var keys = getkeys(person);
document.body.innerHTML = '<pre>' + JSON.stringify(keys) + '</pre>';
然后使用Array.prototype.map
将按键数组按到您喜欢的格式。
请注意person.personal.empty
的行为。
这似乎是存储对象密钥的一种奇怪方式。我想知道你在未来的“进一步使用”是什么。
答案 1 :(得分:1)
我在github上找到了以下解决方案。
答案 2 :(得分:0)
这对我有用。请注意,首先创建raw
映射,然后mapped
到join
中items
到Array
的{{1}}。
.
祝你好运...