如何在两个数组匹配到对应值时替换目标数组的对应数据
实现方案
实现思路
- 先将
array2转换为以日期值为键的映射结构,避免后续匹配时重复遍历数组,大幅提升执行效率 - 遍历
array1的每一项,检查当前项的日期是否存在于映射中,存在则直接替换count值即可
代码实现(ES6+ 推荐)
// 构建日期和count的映射表 const dateCountMap = new Map(array2.map(item => [item.Dates, item.count])); // 方式1:生成新数组,不修改原array1 const replacedArray = array1.map(item => { return dateCountMap.has(item.Dates) ? {...item, count: dateCountMap.get(item.Dates)} : item; }); // 方式2:直接修改原array1,无需返回新数组 array1.forEach(item => { if (dateCountMap.has(item.Dates)) { item.count = dateCountMap.get(item.Dates); } });
方案说明
- 该方案时间复杂度为
O(n+m)(n为array1长度,m为array2长度),比双重循环匹配的O(n*m)效率高很多,数组长度越大优势越明显 - 若需要兼容低版本不支持ES6语法的环境,可以用普通对象替代Map实现映射功能
内容的提问来源于stack exchange,提问作者Alexis Murillo
相关产品推荐
相关产品推荐

