使用string中的键编辑多维数组值

时间:2015-11-26 16:56:08

标签: javascript arrays multidimensional-array

我遇到一些js代码问题,希望你能帮助我

我有一个这样的数组:

var object = {
    one : {
        'first' : 'value1',
        'second' : 'value2'
        'third' : {
            'first' : 'value1',
            'second' : 'value2'
        }
    }
    ...
}

像一个字符串:

var string = 'one.third.second'

所以,我的问题是 - 如何使用字符串中的键来编辑对象的值?

谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,我肯定无法找到我之前的答案,也许这是我的想象。

你可以使用这个答案中的技巧来做到这一点,但是当你到达最后一个键而不是获取值时,记住最后一个对象并进行赋值:



Object.setByString = function(o, s, value) {
    s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
    s = s.replace(/^\./, '');           // strip a leading dot
    var a = s.split('.');
    for (var i = 0, n = a.length - 1; i < n; ++i) {
        var k = a[i];
        if (k in o) {
            o = o[k];
        } else {
            return;
        }
    }
    o[a[a.length - 1]] = value;
};

var obj = {
    one : {
        'first' : 'value1',
        'second' : 'value2',
        'third' : {
            'first' : 'value1',
            'second' : 'value2'
        }
    }
};

var string = 'one.third.second';

Object.setByString(obj, string, 42);
snippet.log(JSON.stringify(obj, null, 2));
&#13;
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;