Javascript:将属性添加到对象数组

时间:2016-10-10 02:01:36

标签: javascript arrays

我有一个对象数组如下:

var myarray=[{"name":"John","address":"home"},{"name":"Peter","address":"home"}]

我想运行一个函数来向数组中添加一个属性,如下所示:

[{"name":"John","address":"home","collection":"friend"},
 {"name":"Peter","address":"home","collection":"friend"}]

我试过这样做:

myarray=myarray.map(function (err, myarray){
    myarray.collection="friend";
    return myarray;
}
console.log(myarray)

但控制台继续返回:

[{0},{1}] 

任何人都可以帮助我吗?谢谢

3 个答案:

答案 0 :(得分:3)

您的代码未将属性添加到数组的内容中。数组的值作为回调函数的第一个参数给出(第二个参数是索引,而不是数组本身 - 这是第三个参数)。只需将新属性分配给回调函数的第一个参数,而不是第二个参数。

编辑 - 正如@zerkms指出的那样,如果您想要更新当前阵列而不是生成新阵列,map可能不是最佳解决方案。 forEach提供了一种迭代当前数组并修改其每个值的方法(这就是你正在做的事情)。这看起来像这样:

myarray.forEach(function(value) {
    value.collection = "friend";
});

正如您在.map的文档中所注意到的,回调函数返回将出现在由map生成的新数组中的新值;如果您正在更改当前数组(即通过修改其内容的属性),则无需返回任何内容。

myarray.map(function(value) {
    value.collection = "friend";
});

另请注意,mapforEach都是方法,因此您需要使用)关闭方法调用。

答案 1 :(得分:2)

错误地使用map()。 map()的第一个参数是数组的当前元素,第二个参数是它的索引 例如:

['a','b','c'].map(function(element, index){console.log(element, index)});

将导致

a 1
b 2
c 3

因此,在您的函数myarray内部是您的索引,并且您尝试将该属性添加到索引中。

现在你必须选择。您可以使用map()作为其使用,并将其返回值分配给myarray

myarray = myarray.map(function(element) {
    element.collection = "friend";
    return element;
});

或者你可以,因为对象没有被复制但是在作为参数传递时被引用,不关心返回值并直接修改元素:

myarray.map(function(element) {
    element.collection = "friend";
});   // returns [undefined, undefined ...]

然而,这并不是应该使用map()

的方式

更好:使用forEach()

myarray.forEach(function(element) {
    element.collection = "friend";
}); 

希望它有所帮助。 迎接!

答案 2 :(得分:1)

您所要做的就是更改地图功能中的参考对象

myarray.map(function (value){
  value.collection = "friend";
});

console.log(myarray);