如何从数组中的对象中提取某些键的值

时间:2017-06-16 08:49:04

标签: javascript arrays object

我有这个对象数组: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);




6 个答案:

答案 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的回调中的元素(不是将它们推入新数组),这只会遍历原始数组一次但可能不够清晰供读者使用,具体取决于您的代码。