我有这个代码来获取一个对象的数组:
let selectedShop = initialResultsState.get('products')
.filter(product => product.shop.selected)
console.log(selectedShop)
结果:
我是否可以通过将另一个es6数组方法串联到filter
的末尾而不是执行let newVariable = selesctedShop[0]
来在同一操作中从数组中提取对象?
我试着把它串起来:
.map(x => {return { shop: x.shop, products: x.products }})
但它仍然是一个对象的数组,因为map总是返回一个新数组。
答案 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()
。这可能更具性能效果。