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);
以下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);