我有一个对象和一个包含相同对象键的数组:
var obj = {
'fieldOne': {
'fieldTwo': {
'fieldThree': {
'fieldFour': {
'someNestedKey': 'test'
}
}
}
}
}
var keysArr = ['fieldOne', 'fieldTwo', 'fieldThree', 'fieldFour', 'someNestedKey'];
有没有办法使用键数组更改“someNestedKey”的值?
简单地通过索引访问“someNestedKey”是行不通的,因为键数组中可能有更多或更少的键。 我尝试以某种方式使用数组长度,但似乎无法正常工作。 我对编程比较陌生,非常感谢任何帮助。
最佳答案
您可以获取路径并检查以下元素是否存在。如果没有将对象分配给新属性。
然后返回属性的值。
最后赋值。
function setValue(object, path, value) {
var way = path.slice(),
last = way.pop();
way.reduce(function (r, a) {
return r[a] = r[a] || {};
}, object)[last] = value;
}
var obj = { fieldOne: { fieldTwo: { fieldThree: { fieldFour: { someNestedKey: 'test' } } } } },
keysArr = ['fieldOne', 'fieldTwo', 'fieldThree', 'fieldFour', 'someNestedKey'];
setValue(obj, keysArr, 42);
console.log(obj);
关于javascript - 如果存在键名数组,则更改对象的深层嵌套键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43226800/