【问题标题】:Changing attributes in an array of objects [duplicate]更改对象数组中的属性[重复]
【发布时间】:2014-09-24 17:11:42
【问题描述】:

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

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;
    });
}

【问题讨论】:

标签: javascript arrays javascript-objects


【解决方案1】:
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 是对的,只是你原来的功能有语法错误。

【讨论】:

  • 这不适用于b.c
猜你喜欢
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多