在这个 stackoverflow 线程中,我了解到您可以通过一个简单的字符串获取对象路径。
Accessing nested JavaScript objects with string key
考虑以下几点:
var person = { name: "somename", personal: { weight: "150", color: "dark" }};
var personWeight = deep_value(person,"personal.weight");
我试图从我的“人”对象构造一个不是“对象”类型的对象值数组。
因此数组看起来像:
[['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);
最佳答案
只需使用递归来遍历对象。
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
的行为。
这看起来确实是一种存储对象键的奇怪方式。我想知道您的“ future 的进一步用途”是什么。
关于Javascript 反射 : Get nested objects path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32141291/