如何根据指定产品名称数组,提取对应产品的所有存储选项?
问题描述
我有一个包含产品名称和存储信息的数组:
let array = [{name: "samsung A", storage: "128GB"}, {name: "samsung B", storage: "128GB"}, {name: "samsung C", storage: "256GB"}, {name: "samsung A", storage: "256GB"}]
另有一个需要查询存储信息的产品名称数组:
let array1 = ["samsung A", "samsung B", "samsung C"]
我需要为array1中的每个产品名称,匹配array里对应的所有可用存储选项。之前我用下面的代码手动指定产品名可以实现,但想要自动遍历array1里的所有产品名来完成这个功能:
array.filter(el => el.name === "samsung A").map(item => item.storage)
解决方案
方法一:直接遍历array1结合filter+map
直接用array1.map()遍历每个产品名,对每个名称复用你之前的逻辑即可:
const result = array1.map(productName => { return { name: productName, storages: array.filter(el => el.name === productName).map(item => item.storage) }; }); console.log(result); // 输出: // [ // { name: 'samsung A', storages: [ '128GB', '256GB' ] }, // { name: 'samsung B', storages: [ '128GB' ] }, // { name: 'samsung C', storages: [ '256GB' ] } // ]
方法二:先构建映射表(更高效)
如果array的数据量较大,反复执行filter会有性能损耗,建议先用reduce构建一个以产品名为键、存储数组为值的映射表,再遍历array1获取结果:
// 构建产品-存储映射表 const storageMap = array.reduce((map, item) => { if (!map[item.name]) { map[item.name] = []; } map[item.name].push(item.storage); return map; }, {}); // 遍历array1生成结果 const result = array1.map(name => ({ name, storages: storageMap[name] || [] // 兼容array1中存在但array里无记录的产品 })); console.log(result); // 输出和方法一一致
内容的提问来源于stack exchange,提问作者Siva Sai
相关产品推荐
相关产品推荐

