如何使用map等数组方法按另一数组同id元素设置对象属性?
解决方案
性能最优实现(推荐)
相比原有双层O(n*m)的时间复杂度,该方案通过Set将查找复杂度降到O(1),整体复杂度优化为O(n+m),尤其适合大数组场景:
// 提取个人曲库所有歌曲id存入Set const purchasedIds = new Set(smallArray.map(item => item.id)); // 遍历歌曲库设置购买状态 bigArray.forEach(item => item.purchased = purchasedIds.has(item.id));
单行实现
如果仅追求单行写法可以合并逻辑,注意该写法性能略低,因为每遍历一次大数组元素都会重复生成Set:
bigArray.forEach(item => item.purchased = new Set(smallArray.map(i => i.id)).has(item.id));
不修改原数组的实现
如果需要保留原bigArray不变,返回全新的数组副本,可以使用map方法:
const purchasedIds = new Set(smallArray.map(item => item.id)); const newBigArray = bigArray.map(item => ({ ...item, purchased: purchasedIds.has(item.id) }));
内容的提问来源于stack exchange,提问作者Dex
相关产品推荐
相关产品推荐

