请提出识别给定商品ID 03的名称的最佳方法。
const product = products.find(product => product.items.some(item => item.id === '03'));
提供产品,但将不得不再次循环以找到名称?
const products = [
{
id: 'p1',
items: [
{
id: 01,
name: 'iphone'
},
{
id: 02,
name: 'samsung'
},
{
id: 03,
name: 'oneplus'
}
]
},
{
id: 'p2',
items: [
{
id: 04,
name: 'nokia'
},
{
id: 05,
name: 'nexus'
},
{
id: 06,
name: 'phone3'
}
]
}
]
}
]
答案 0 :(得分:0)
我想要:
const product = products
.reduce((acc, product) => {
return [...acc, ...product.items];
}, [])
.find(item => item.id === "03");
const productName = product && product.name;
console.log(productName); // oneplus
答案 1 :(得分:0)
由于您似乎担心性能,并且似乎只有一个匹配的id,经典的for
循环最适合此任务。
let matchingItem;
for (let i = 0; i < products.length; i++){
const product = products[i];
matchingItem = product.items.find(item => item.id === "03");
if (matchingItem) {
break;
}
}
这不是很花哨,但是一旦找到匹配项就可以立即停止执行,这是最佳选择。