JS遍历两个二维数组匹配对应项执行自定义运算生成新数组
二维数组同键名自定义运算实现方案
核心逻辑不需要复杂嵌套循环,分三步即可完成,且运算规则可灵活替换:
- 先将其中一个二维数组转换为以名称为键、数值为值的映射表,大幅提升名称匹配效率
- 遍历另一个数组,按名称取出两个数组对应的数值,传入自定义运算函数得到计算结果
- 将名称和计算结果重新拼接为要求的二维数组格式返回
注意:你提供的原始数组代码中,相邻元素之间遗漏了逗号分隔符,直接运行会触发语法错误,需要先补全逗号。
完整实现代码
// 修正语法后的原始二维数组 const MyArray1 = [["jack", 0], ["daniel", 2], ["sam", 1]]; const MyArray2 = [["jack", 0], ["daniel", 10], ["sam", 2]]; // 自定义运算函数,后续要切换减法、乘法、除法只需要修改这个函数的内部逻辑即可 function myFunction(a, b) { return a + b; } /** * 二维数组同名称数值计算通用方法 * @param {Array} arr1 第一个二维数组 * @param {Array} arr2 第二个二维数组 * @param {Function} calcFunc 自定义运算规则 * @returns {Array} 计算完成的结果二维数组 */ function process2DArray(arr1, arr2, calcFunc) { // 生成第二个数组的名称-数值映射 const valueMap = new Map(arr2); // 遍历计算并拼接结果 return arr1.map(([name, val1]) => { const val2 = valueMap.get(name); // 容错处理:如果第二个数组不存在对应名称,直接返回第一个数组的原值,可按需调整 const resVal = val2 !== undefined ? calcFunc(val1, val2) : val1; return [name, resVal]; }); } // 调用示例 const finalArray = process2DArray(MyArray1, MyArray2, myFunction); console.log(finalArray); // 运行输出:[["jack", 0], ["daniel", 12], ["sam", 3]],和预期结果完全一致
规则替换说明
如果需要切换运算规则,只需要修改传入的运算函数即可,不需要改动核心处理逻辑,比如要实现除法运算:
// 除法运算示例,增加除0兜底逻辑 function divideFunc(a, b) { return b === 0 ? 0 : a / b; } const divideRes = process2DArray(MyArray1, MyArray2, divideFunc);
内容的提问来源于stack exchange,提问作者traha
相关产品推荐
相关产品推荐

