JS数组操作:如何对比两组数组并生成第三组?求技术建议
嘿,这问题很清晰!你应该是想把selectItems里的商品ID,对应上它们在activeItems里的价格,生成一组关联好的目标数据对吧?我给你几个实用的JavaScript实现方案,你可以根据自己的需求挑选:
方案一:先建立ID-价格映射表(高效复用)
这种方法适合后续需要多次查询价格的场景,先把所有ID和对应的价格存成一个映射对象,之后查找会非常快:
// 第一步:构建itemId到price的映射对象 const itemPriceMap = {}; activeItems.itemId.forEach((itemId, index) => { // 如果需要把价格转成数字类型,这里可以加 Number() 或 parseFloat() itemPriceMap[itemId] = activeItems.price[index]; }); // 生成「键为ID,值为价格」的对象格式目标数据 const selectedItemPrices = {}; selectItems.forEach(id => { // 可选:判断ID是否存在,避免无对应价格的情况 if (itemPriceMap.hasOwnProperty(id)) { selectedItemPrices[id] = itemPriceMap[id]; } }); // 或者生成「数组对象」格式的目标数据(更易遍历展示) const selectedItemsData = selectItems.map(id => ({ itemId: id, price: itemPriceMap[id] || '无对应价格' // 无匹配时显示默认值 }));
方案二:直接遍历查找(简洁直观)
如果你的数据量不大,直接通过索引查找会更简洁,不需要额外构建映射表:
// 生成数组对象格式的目标数据 const selectedItemsData = selectItems.map(selectedId => { // 找到当前ID在itemId数组中的索引 const matchIndex = activeItems.itemId.indexOf(selectedId); return { itemId: selectedId, // 找到索引就取对应价格,没找到就给默认值 price: matchIndex !== -1 ? activeItems.price[matchIndex] : '无对应价格' }; }); // 生成键值对对象格式的目标数据 const selectedItemPrices = {}; selectItems.forEach(selectedId => { const matchIndex = activeItems.itemId.indexOf(selectedId); if (matchIndex !== -1) { selectedItemPrices[selectedId] = activeItems.price[matchIndex]; } });
额外提醒
- 如果需要对价格进行计算,记得把字符串类型的价格转成数字,比如用
Number(activeItems.price[index])或者parseFloat(activeItems.price[index]) - 如果担心有重复的ID,或者需要处理异常情况,可以在构建映射表的时候加判断逻辑
内容的提问来源于stack exchange,提问作者PAyTEK
相关产品推荐
相关产品推荐

