繁体   English   中英

dojo array.push替换了上一项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM