javascript - 如果存在键名数组,则更改对象的深层嵌套键值

标签 javascript arrays object

我有一个对象和一个包含相同对象键的数组:

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/

相关文章:

javascript - 如何使用 JavaScript 将 HTML 段落拆分为文本行

php - 将字符串分隔成数组

PHP空数组值声明

c# - 从对象的常规列表中删除所有空条目

javascript - 在对象中找不到空数组值

Javascript替换所有不在双引号中的逗号

javascript - 如何为所有浏览器(包括移动浏览器)验证表单

javascript - 在 JavaScript 中从一个函数访问另一个函数的变量

java - 如何创建一个方法,接受一个数组并查找某个数字的所有出现,并返回该数字出现的所有索引的新数组

objective-c - 使用 Pushviewcontroller 自下而上的动画?