繁体   English   中英

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

[英]Javascript: Adding a property to an array of objects

我有一个对象数组,如下所示:

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}] 

谁能帮我? 谢谢

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

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

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

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

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

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

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

希望它有所帮助。 问候!

您所要做的就是更改 map 函数中的引用对象

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

console.log(myarray);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM