You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:06:29