[英]dojo array.push replaced the previous item
以下javascript返回personNames
作为
[{"name":"smith"},{"name":"smith"},{"name":"smith"}]
代替
[{"name":"john"},{"name":"doug"},{"name":"smith"}]
var personNames = []; var personName = {}; var persons = [{"firstname": "john", "id": "111"}, {"firstname": "doug", "id": "777"}, {"firstname": "smith", "id": "888"}]; if(persons.length > 0){ array.forEach(persons, function(person){ personName.name = person.firstname; personNames.push(personName); }); }
首先,可以使用Array.prototype.map
作为获取名称的方法:
var persons = [{"firstname": "john", "id": "111"}, {"firstname": "doug", "id": "777"}, {"firstname": "smith", "id": "888"}]; var personNames = persons.map(p => ({ name: p.firstname })); console.log(personNames);
然后 ,代码的问题在于,您创建了一个对象,每次更改该对象的值,然后将同一对象再次推入数组。
我认为您忘记了有关对象和引用的某些知识。 顺便说一句,这将是您的正确实现:
var persons = [{"firstname": "john", "id": "111"}, {"firstname": "doug", "id": "777"}, {"firstname": "smith", "id": "888"}]; var personNames = []; persons.forEach(p => personNames.push({ name: p.firstname })); console.log(personNames);
要提到的另一件事是,无需检查人员中是否有任何物品。
array.forEach(persons, function(person){
personName.name = person.firstname;
personNames.push(personName);
});
personName
在每次迭代中都引用相同的对象。 JavaScript在内存中保留了对该对象的引用,因此当您以后对其进行更新时,它会在所有地方(包括数组内部)进行更新。
对于您的用例,您每次需要重新初始化personName
:
array.forEach(persons, function(person){
personName = {};
personName.name = person.firstname;
personNames.push(personName);
});
(第一行应该是persons.forEach(function(person){
吗?
像这样使用personName语言环境:
var personNames = [];
var persons = [{"firstname": "john", "id": "111"}, {"firstname": "doug", "id": "777"}, {"firstname": "smith", "id": "888"}];
if(persons.length > 0) {
persons.forEach(element => {
var personName = {};
personName.name = element.firstname;
personNames.push(personName);
});
}
console.log(personNames); // [ { name: 'john' }, { name: 'doug' }, { name: 'smith' } ]
$array.forEach()
不是函数,因为未定义array
。 使用数组的名称代替,即persons.forEach()
。 personName
,否则您将访问变量的全局实例,该实例将返回最近的更新值。 检查JS Bin上的代码段 var personNames = []; var persons = [{"firstname": "john", "id": "111"}, {"firstname": "doug", "id": "777"}, {"firstname": "smith", "id": "888"}]; if(persons.length > 0){ persons.forEach(function(person){ //use personName locally var personName = {}; personName.name = person.firstname; personNames.push(personName); }); } console.log(personNames);
试试看
var personNames = [];
var persons = [{"firstname": "john", "id": "111"}, {"firstname": "doug", "id": "777"}, {"firstname": "smith", "id": "888"}];
for (i = 0; i < persons.length; i++) {
personNames.push({name:persons[i].firstname});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.