我有一个对象数组如下:
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}]
任何人都可以帮助我吗?谢谢
答案 0 :(得分:3)
您的代码未将属性添加到数组的内容中。数组的值作为回调函数的第一个参数给出(第二个参数是索引,而不是数组本身 - 这是第三个参数)。只需将新属性分配给回调函数的第一个参数,而不是第二个参数。
编辑 - 正如@zerkms指出的那样,如果您想要更新当前阵列而不是生成新阵列,map
可能不是最佳解决方案。 forEach
提供了一种迭代当前数组并修改其每个值的方法(这就是你正在做的事情)。这看起来像这样:
myarray.forEach(function(value) {
value.collection = "friend";
});
正如您在.map
的文档中所注意到的,回调函数返回将出现在由map
生成的新数组中的新值;如果您正在更改当前数组(即通过修改其内容的属性),则无需返回任何内容。
myarray.map(function(value) {
value.collection = "friend";
});
另请注意,map
和forEach
都是方法,因此您需要使用)
关闭方法调用。
答案 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);