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

Javascript获取数组索引键 实现两个州代码关联数组的合并

问题分析

你的现有代码存在三个核心问题:

  • 默认两个数组相同索引位置对应同一个州,这一假设不成立,两个数组的州排序大概率不一致
  • 直接对两个子数组做全等比较,数组为引用类型,只要不是同一个内存引用永远返回false,你需要对比的是子数组索引为0的州代码字段
  • 仅做了匹配项打印,没有实现替换逻辑
实现方案

推荐优先使用Map做查找映射,时间复杂度为O(n+m),效率远高于嵌套循环的O(n*m):

// 版本1:不修改原数组,返回新的合并后数组
function mergeArrays(arr1, arr2) {
  // 将第二个数组转为Map,键为州代码,值为对应数值
  const stateMap = new Map(arr2);
  return arr1.map(([stateCode, defaultValue]) => {
    // 匹配到第二个数组的数值则替换,否则保留默认值
    return [stateCode, stateMap.get(stateCode) ?? defaultValue];
  })
}

如果需要直接修改原第一个数组,可以使用下面的版本:

// 版本2:直接修改原arr1,无返回值
function mergeArrays(arr1, arr2) {
  const stateMap = new Map(arr2);
  for(let i = 0; i < arr1.length; i++) {
    const stateCode = arr1[i][0];
    if(stateMap.has(stateCode)) {
      arr1[i][1] = stateMap.get(stateCode);
    }
  }
}

如果运行环境不支持Map,也可以使用嵌套循环实现:

// 版本3:嵌套循环实现,适合数据量小的场景
function mergeArrays(arr1, arr2) {
  for(let i = 0; i < arr1.length; i++) {
    const currentCode = arr1[i][0];
    for(let j = 0; j < arr2.length; j++) {
      if(arr2[j][0] === currentCode) {
        arr1[i][1] = arr2[j][1];
        break;
      }
    }
  }
}

内容的提问来源于stack exchange,提问作者Tim Bogdanov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:54:03