如何在angularjs中向对象数组添加属性

时间:2015-09-21 17:03:11

标签: javascript arrays angularjs

我有一个对象数组如下:

var array = [{'content1': 'abc', 'id1':'100'},{'content2': 'xyz', id2':'200'}...];

现在我想为这些对象添加新元素(我不知道是否可以,但不是手动),我希望相同的数组如下:

var array = [{'content1': 'abc', 'id1':'100', 'name': 'foo'},{'content2': 'xyz', 'id2':'200', 'name': 'bar'}...];

有人可以帮助我这样做吗?

5 个答案:

答案 0 :(得分:1)

您可以使用角度合并

   var array = [{
    'content1': 'abc',
    'id1': '100'
  }, {
    'content2': 'xyz',
    'id2': '200'
  }];

  var array2 = [{
     'name': 'foo'
  }, {
     'name': 'bar'
  }];

  var object = angular.merge({}, array, array2)

,结果将是所有属性合并:

var array2 = [{
    'content1': 'abc',
    'id1': '100',
    'name': 'foo'
  }, {
    'content2': 'xyz',
    'id2': '200',
    'name': 'bar'
  }];

看看这个吸虫:

http://plnkr.co/edit/X7Zv99qNXSkmHh4lIBMP

答案 1 :(得分:1)

您无法使用push设置属性。 push可以用来添加数组元素。 如果你想使用

$scope.object.array1.push(value);

那么值应该是像

这样的对象

var value = {content1: 'xyz',id:'4'};

要添加属性,您可以按照以下流程进行操作。

说出你的对象:

$scope.object={
     array1: [{content1: 'abc', id1:'100'},
       {content2: 'xyz', id2:'200'}],
     array2: [{content1: 'abc', id1:'100'},
     {content2: 'xyz', id2:'200'}]
    };

如果要为array1的每个对象添加属性name。您可以使用forEach添加新属性和值。比如调用函数addProperty来添加属性和值。

$scope.addProperty = function(){
  var i =0;
  angular.forEach($scope.object.array1, function(eachObj) {
    i+=1;
    eachObj.name ='foo'+i;
  });
};

然后输出array1将是

[{"content1":"abc","id1":"100","name":"foo1"},{"content2":"xyz","id2":"200","name":"foo2"}]

PLUNKER DEMO

答案 2 :(得分:1)

使用.map();

的最简单方法
array.map(function(element) {
    return element.name = insertedName;
});

您可以使用将发送 insertedName 的功能。

答案 3 :(得分:0)

有几种方法可以剥皮。只是取决于你需要它的动态。

这是一个基本示例,说明如何通过索引访问对象来完成它:

var array = [{'content1': 'abc', 'id1':'100'},{'content2': 'xyz', 'id2':'200'}];

array[0].name = 'foo';
array[1].name = 'bar';

https://jsfiddle.net/0f6L1x44/

如果您需要更动态地添加名称,可以执行以下操作:

findById(100).name = 'foo';
findById(200).name = 'bar';

function findById(id) {
    var index = array.map(function(item) { return item.id; }).indexOf(id);

    return array[index];
}

https://jsfiddle.net/pj31n0Lj/

注意:我在此示例中清理了数组对象。不确定为什么你有content1和content2等。

答案 4 :(得分:0)

我有一个像这样的对象:

$scope.object={array1: [ ], array2:[ ] };

如何将新值推送到这些数组中?

当我尝试$scope.object.array1.push(value);时,我收到错误消息:无法读取推送。