使用es6数组方法从数组中提取第一个对象

时间:2017-06-22 08:46:01

标签: javascript arrays ecmascript-6

我有这个代码来获取一个对象的数组:

let selectedShop = initialResultsState.get('products')
        .filter(product => product.shop.selected)

console.log(selectedShop)

结果:

enter image description here

我是否可以通过将另一个es6数组方法串联到filter的末尾而不是执行let newVariable = selesctedShop[0]来在同一操作中从数组中提取对象?

我试着把它串起来:

.map(x => {return { shop: x.shop, products: x.products }})

但它仍然是一个对象的数组,因为map总是返回一个新数组。

2 个答案:

答案 0 :(得分:4)

如何使用find()方法代替filter()find()总是返回单个项目,不包含在数组中,除非它找不到任何项目,在这种情况下它会返回undefined

let selectedShop = initialResultsState.get('products')
    .find(product => product.shop.selected)

它也更有效率,因为它一旦找到一个项目就会立即停止迭代数组。 filter()将始终遍历整个数组,如果您只对第一个相关项目感兴趣,那将是一种浪费。

答案 1 :(得分:4)

两种基本方式:

第一种方式是转变:

数组方法,您可以使用Array.prototype.shift()

let selectedShop = initialResultsState.get('products')
    .filter(product => product.shop.selected)
    .shift();

第二种方式是作业:

您可以destructuring assignment执行此操作。在你的情况下:

let [selectedShop] = initialResultsState.get('products')
    .filter(product => product.shop.selected);

这在ES6中可用,主流浏览器支持,无需转换。

但你可以看到另一种方法,答案(Mikael Lennholm的回答)是Array.prototype.find()。这可能更具性能效果。