如何在不遍历数组的情况下提取对象数组中特定键的值?

How to extract Values of particular key in an object array without iterating over the array?

假设我有一个对象数组调用 movies,如下所示。

movies = [{ id : 1,title : 'Black Panther'},{ id : 2,title : 'Avengers'},{ id : 1,title : 'Justice League'},{ id : 4,title : 'Infinity War'},{ id : 5,title : 'Spider man'}]

我是否可以从每个对象中提取特定键的值?像这样 titles 数组。

titles = ['Black Panther','Avengers','Justice League','Infinity War','Spider Man']

目前我正在使用 map 函数。有没有其他方法可以在不遍历每个对象的情况下实现这一点。这可以使用 ES6 rest/spread feature 来实现吗?

不,如果不循环遍历数组就无法执行此操作。不,rest/spread 无济于事。

您说过您正在使用 map,这可能是最简单的方法:

titles = movies.map(e => e.title);

const movies = [{ id : 1,title : 'Black Panther'},{ id : 2,title : 'Avengers'},{ id : 1,title : 'Justice League'},{ id : 4,title : 'Infinity War'},{ id : 5,title : 'Spider man'}];
const titles = movies.map(e => e.title);
console.log(JSON.stringify(titles));

或解构:

titles = movies.map(({title}) => title);

const movies = [{ id : 1,title : 'Black Panther'},{ id : 2,title : 'Avengers'},{ id : 1,title : 'Justice League'},{ id : 4,title : 'Infinity War'},{ id : 5,title : 'Spider man'}];
const titles = movies.map(({title}) => title);
console.log(JSON.stringify(titles));

您也可以使用 for-of:

titles = [];
for (const {title} of movies) {
    titles.push(title);
}

const movies = [{ id : 1,title : 'Black Panther'},{ id : 2,title : 'Avengers'},{ id : 1,title : 'Justice League'},{ id : 4,title : 'Infinity War'},{ id : 5,title : 'Spider man'}];
const titles = [];
for (const {title} of movies) {
    titles.push(title);
}
console.log(JSON.stringify(titles));

不,传播不能做到这一点。 您可以将 map 与参数解构结合起来:

list.map(({ title }) => title)

或者您可以使用 lodash/map,它有一个 shorthand 用于您的用例:

import { map } from 'lodash'
map(list, 'title')

并且使用 lodash/fp,您甚至可以在其他地方重用您的函数 :D

import { map } from 'lodash/fp'
const getTitles = map('title')
getTitles(list)