更改对象数组中的属性

时间:2014-09-24 17:11:43

标签: javascript arrays javascript-objects

我有一组具有相同属性的对象(任意深度):

var array = [],
    i;

for(i = 0; i < 4; i++) {
    array.push({
        'a': '0',
        'b': {
            'c': '0'
        }
    });
}

我想要一个函数将属性设置为所有对象中的特定值,如下所示:

// only to demonstrate, doesn't actually work!
function set(array, attribute, value) {
    array.forEach(function(obj) {
        obj[attribute] = value;
    });
}

能够像这样(或类似)使用它:

set(array, 'a', 1);
set(array, 'b.c', 5);

如果您无法理解我的问题,请帮我澄清一下。提前谢谢!

解决方案

我解决了,但无法发布答案,所以这里是:

function set(array, attribute, value) {
    // a.b.c => [a, b, c]
    attribute = attribute.split('.');

    array.forEach(function(obj) {
        // obj = array[index]
        for (i = 0; i < attribute.length - 1; i++) {
            // i = 0) obj = array[index].a
            //     1) obj = array[index].a.b
            obj = obj[attribute[i]];
        }

        // array[index].a.b.c = value
        obj[attribute[i]] = value;
    });
}

1 个答案:

答案 0 :(得分:0)

var array = [],
    i;

for(i = 0; i < 4; i++) {
    array.push({
        'a': '0',
        'b': {
            'c': '0'
        }
    });
}

set = function(array, key, value){
  for (i = 0; i < array.length; i++){
    array[i][key] = value;
  }
}

set(array, "test", "Test");
alert(array[0]['test']);

哈,@ Oriol是对的,你的原始功能只是语法错误。

相关问题