我有这个对象数组:var array = [{name: "Tom", id: 123}, {name: "chris", id: 1234}, {name: "Simon", id: 111}];
我想遍历数组中的3个对象并提取每个对象的名称,然后将该名称推送到新数组中。
这是我认为可行的:
var array = [{name: "Tom", id: 123}, {name: "chris", id: 1234}, {name: "Simon", id: 111}];
var newArrayOfNames = [];
Object.values(array).forEach(function(name){
newArrayOfNames.push(name);
});
console.log(newArrayOfNames);

答案 0 :(得分:2)
你可以试试这个:
var array = [{name: "Tom", id: 123}, {name: "chris", id: 1234}, {name: "Simon", id: 111}];
var newArrayOfNames = [];
array.forEach(function(item) {
newArrayOfNames.push(item.name);
});
console.log(newArrayOfNames);
答案 1 :(得分:1)
对代码进行一些小改动:
var array = [{name: "Tom", id: 123}, {name: "chris", id: 1234}, {name: "Simon", id: 111}];
var newArrayOfNames = [];
Array.prototype.forEach.call(array, function(o){
newArrayOfNames.push(o.name);
});
console.log(newArrayOfNames);

答案 2 :(得分:1)
let array = [{name: "Tom", id: 123}, {name: "chris", id: 1234}, {name: "Simon", id: 111}];
let names = []
for(let person of array) {
names.push(person.name)
}
这应该有效,它需要来自" person"的name属性,在这种情况下是数组中的一个条目。
答案 3 :(得分:0)
现有代码的一个小改动就可以了:
var array = [{name: "Tom", id: 123}, {name: "chris", id: 1234}, {name: "Simon", id: 111}];
var newArrayOfNames = [];
Object.values(array).forEach(function(person){ // note that person is the object on each iteration of array
newArrayOfNames.push(person.name); // object has property called name
});
console.log(newArrayOfNames); // => [ "Tom", "chris", "Simon" ]

答案 4 :(得分:0)
这是https://stackoverflow.com/a/44583637/707451的完美用例,其目标是:
reduce()方法对累加器和每个都应用一个函数 数组中的元素(从左到右)将其缩小为单个元素 值。
在您的情况下,您希望累积所有名称并将它们放入新数组中。适合.reduce()
。
请注意,acc
参数代表累加器,因此每次循环person
时,都会对累加器进行更改,然后将其传递给下一个循环。
注意:我不建议您使用.forEach()
解决问题,因为forEach
会直接更改原始数组。您所做的任何更改都将应用于people
,您将从forEach
返回一个新数组。这就是Array.prototype.map/reduce
等方法存在的原因!
const people = [
{ name: "Tom", id: 123} ,
{ name: "chris", id: 1234} ,
{ name: "Simon", id: 111 },
];
const names = people.reduce((acc, person) => {
acc.push(person.name);
return acc;
}, []);
答案 5 :(得分:0)
恕我直言,截至 2021 年的最佳方法如下:
let array = [
{
name: "Tom",
id: 123
},
{
name: "chris",
id: 1234
},
{
name: "Simon",
id: 111
}
];
// Use the Array's map function to transform the elements of the array into something else
let newArrayOfNames = array.map( pValue => pValue.name );
console.log( newArrayOfNames );
map
的文档说明:
map()
方法创建一个新数组,其中填充了对调用数组中的每个元素调用提供的函数的结果。
这将是最合适的方式(假设您不再支持 IE 或使用转译器),因为两个数组的长度相同。
如果您需要省略元素,我会先使用 filter
函数来省略这些元素,然后是 map
函数,尽管这需要遍历原始数组一次,然后遍历一次过滤后的数组,代码的目的对于代码的读者来说更清晰。另一种方法是使用reduce
创建另一个数组并过滤给reduce
的回调中的元素(不是将它们推入新数组),这只会遍历原始数组一次但可能不够清晰供读者使用,具体取决于您的代码。