![](/img/trans.png)
[英]Adding values of a particular property from all javascript objects in an array
[英]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";
});
另请注意, map
和forEach
都是方法,因此您需要使用)
关闭方法调用。
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.