var obj = {
people: {
John: {
pets:{
dog:{
name:"Umbrella",
age:12
},
cat:{
name:"Kitty",
age:5
}
}
}
}
};
var path=['people', 'John', 'pets', 'cat', 'name'];
var newName='Train';
如何设置数组想要的对象(现在它是猫的名字)?阵列可以改变,所以我不能手工编写。我需要一个函数来自动执行,具体取决于数组
答案 0 :(得分:0)
递归使用以下函数
foreach(var key in obj)
{
console.log('key'); //gives the key name like - people, John, Pets, dog, cat etc.,
}
答案 1 :(得分:0)
你可以使用像这样的递归函数:
var prop = function (obj, chain) {
if (obj && chain.length > 0) {
return prop(obj[chain[0]], chain.slice(1));
}
return obj;
};
prop(obj, path);
甚至是迭代函数:
var prop = function (obj, chain) {
var i = 0;
while (obj && i < chain.length) {
obj = obj[chain[i]];
i++;
}
return obj;
};
prop(obj, path);
编辑:要设置值,您可以执行以下操作:
var set = function (obj, chain, value) {
if (obj === undefined || obj === null) return;
var i = 0;
while (obj[chain[i]] !== undefined && obj[chain[0]] !== null && i < chain.length - 1) {
obj = obj[chain[i]];
i++;
}
obj[chain[i]] = value;
};
set(obj, path, 'Train');
答案 2 :(得分:0)
使用for
循环:
var cursor = obj;
for (var i = 0, len = path.length; i < len; i++) {
cursor = cursor[path[i]];
}