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

时间:2018-03-10 11:02:42

标签: javascript arrays ecmascript-6 array-map

假设我有一个像下面的对象阵列电话电影

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 = ['Black Panther','Avengers','Justice League','Infinity War','Spider Man']

目前我正在使用map功能进行此操作。有没有其他方法可以实现这一点,而无需迭代每个对象。可以使用 ES6休息/传播功能来实现吗?

2 个答案:

答案 0 :(得分:5)

不,如果不循环遍历数组,就无法做到这一点。不,休息/传播不会有帮助。

您已经说过您正在使用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));




答案 1 :(得分:1)

不,传播无法做到。 你可以将地图与参数解构结合起来:

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

或者您可以使用lodash/map,其中包含您的用例的简写:

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

使用lodash/fp,您甚至可以在其他地方重复使用您的功能:D

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