如果我有一个指向所需属性的路径数组,如何设置为对象的属性
How do I SET to the Object's properties if I have a path array to the needed property?
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';
如何将数组想要的内容(现在是猫的名字)设置为对象?数组可以更改,所以我不能手写。我需要一个函数来根据数组自动执行此操作
您可以使用如下所示的递归函数:
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');
递归使用以下函数
foreach(var key in obj)
{
console.log('key'); //gives the key name like - people, John, Pets, dog, cat etc.,
}
使用 for
循环:
var cursor = obj;
for (var i = 0, len = path.length; i < len; i++) {
cursor = cursor[path[i]];
}
相关文章:
- 至于所有输入的标签都用指定的属性来设置,例如属性检查=false
- 无法将属性“innerHTML”设置为空
- 可以't将属性src设置为null,即使DOM已准备就绪
- Vue.js在计算属性中设置值
- 使用jQuery通过更改src属性来设置一个图像标签的动画
- 如何修复未捕获的类型错误:无法读取属性'设置'的未定义
- 无法让 JavaScript 与 readOnly 属性同时设置背景颜色
- getElementById TypeError: “无法将属性'innerHTML'设置为null
- Javascript 对象属性未定义(但属性已设置)
- 模拟“类”时,为什么要在 .prototype 属性中设置方法,而不是在构造函数本身中设置方法
- Unca不能将属性“innerHTML”设置为空
- 无法向对象添加属性(无法设置未定义的属性)
- 将主干模型属性值设置为另一个模型
- 从对象内的其他属性值设置属性值
- 无法在 Chrome 扩展程序中将属性“innerHTML”设置为空
- Multer :在目标属性中设置不同的目的地
- 无法将属性“innerHTML”设置为空
- 使用 JavaScript 通过更改链接的类属性来设置链接的样式
- 所有属性都设置为上次循环迭代值 [为什么?
- 无法将属性“innerHTML”设置为空