dojo array.push 替换了上一个项目

dojo array.push replaced the previous item

以下javascriptreturnspersonNames

[{"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.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){吗?)

首先,您可以使用 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);

还有一点要提就是不需要检查persons里面有没有物品

试试看

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

像这样在本地使用人名:

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 否则您将访问变量的全局实例,它将 return 最后更新的值。 Check code snippet at 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);