Javascript:向对象数组添加属性

Javascript:向对象数组添加属性,javascript,arrays,Javascript,Arrays,我有一个对象数组,如下所示: var myarray=[{"name":"John","address":"home"},{"name":"Peter","address":"home"}] [{"name":"John","address":"home","collection":"friend"}, {"name":"Peter","address":"home","collection":"friend"}] 我想运行一个函数,将属性添加到数组中,如下所示: var myarray=

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

var myarray=[{"name":"John","address":"home"},{"name":"Peter","address":"home"}]
[{"name":"John","address":"home","collection":"friend"},
 {"name":"Peter","address":"home","collection":"friend"}]
我想运行一个函数,将属性添加到数组中,如下所示:

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
可能不是最佳解决方案。提供一种方法,用于迭代当前数组,并修改其每个值(这就是您正在执行的操作)。这看起来像这样:

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

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

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

还要注意的是,
map
forEach
都是方法,因此您需要使用
关闭方法调用,您所要做的就是在map函数中更改引用对象

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

console.log(myarray);
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";
}); 
希望有帮助。
欢迎

它不是添加到数组中,而是添加到临时索引中。在函数内部,
myarray
是一个索引。使用
map
对调用它的数组进行变异会产生极大的误导。相反,我们必须使用
Array.prototype.forEach
@Syntac很好,这里的参数顺序有点混乱。@泽克姆斯谢谢你的建议,你完全正确,这既不是
map
的直观用法,也不是惯用用法。谢谢你!它帮助我更好地理解了map。使用
console.log()
进行基本调试会发现问题。我在问题中复制了我的控制台消息,但看不出它揭示了什么问题。显示的代码不会产生您声称的输出,它返回
[0,1]
(假设您修复了丢失的
语法错误)。如果您在回调中尝试了
console.log(myarray)
,您就会知道原因。即使它显示[0,1],我也不知道这是如何“揭示”问题的,因为您希望得到一个对象数组(事实上声称这就是输出),但得到一个索引数组却没有向您揭示任何信息?甚至不足以让你在回调中做更多的日志记录?哦,维。。。