以下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);
});
}
答案 0 :(得分:1)
首先,作为一种获取名称的方法,您可以使用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);

另一件需要提及的事情是,无需检查人物中是否有任何物品。
答案 1 :(得分:0)
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){
吗?)
答案 2 :(得分:0)
只需使用personName localy:
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' } ]
答案 3 :(得分:0)
$array.forEach()
不是函数,因为未定义array
。
使用数组的名称,即persons.forEach()
。personName
,否则您将访问将返回上次更新值的变量的全局实例。
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);
答案 4 :(得分:-1)
试试
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});
}