数组与数组关键字段匹配,并插入?

两个数组匹配关键字段,想将数组一插入到匹配数组二中。关键匹配字段是key 或者 dataIndex都可以。

let arrOne = [{
"ORDER_NUM": 58166870,
"ORDER_QTSB": 3,
"AREA_NAME": "总计",
"ORDER_GPON": 1451088,
"ORDER_PXJ": 10967,
"ORDER_DXGL": 1821963,
"ORDER_GXG": 94200,
"ORDER_OLT": 0,
"ORDER_CRAN": 2425,
"ORDER_TQ": 319835,
"ORDER_MSAP": 13141,
"ORDER_JTH": 57087,
"ORDER_PTGL": 54395997,
"ORDER_JZL": 164
}]

let arrTwo = [{
    "dataIndex": "ORDER_CRAN",
    "width": 200,
    "title": "设备1",
    "align": "center",
    "key": "ORDER_CRAN"
}, {
    "dataIndex": "ORDER_GPON",
    "width": 200,
    "title": "设备2",
    "align": "center",
    "key": "ORDER_GPON"
}, {
    "dataIndex": "ORDER_MSAP",
    "width": 200,
    "title": "设备3",
    "align": "center",
    "key": "ORDER_MSAP"
}, {
    "dataIndex": "ORDER_OLT",
    "width": 200,
    "title": "设备4",
    "align": "center",
    "key": "ORDER_OLT"
}, {
    "dataIndex": "ORDER_DXGL",
    "width": 200,
    "title": "设备5",
    "align": "center",
    "key": "ORDER_DXGL"
}, {
    "dataIndex": "ORDER_GXG",
    "width": 200,
    "title": "设备6",
    "align": "center",
    "key": "ORDER_GXG"
}, {
    "dataIndex": "ORDER_JZL",
    "width": 200,
    "title": "设备7",
    "align": "center",
    "key": "ORDER_JZL"
}, {
    "dataIndex": "ORDER_JTH",
    "width": 200,
    "title": "设备8",
    "align": "center",
    "key": "ORDER_JTH"
}, {
    "dataIndex": "ORDER_PXJ",
    "width": 200,
    "title": "设备9",
    "align": "center",
    "key": "ORDER_PXJ"
}, {
    "dataIndex": "ORDER_PTGL",
    "width": 200,
    "title": "设备10",
    "align": "center",
    "key": "ORDER_PTGL"
}, {
    "dataIndex": "ORDER_QTSB",
    "width": 200,
    "title": "设备11",
    "align": "center",
    "key": "ORDER_QTSB"
}, {
    "dataIndex": "ORDER_TQ",
    "width": 200,
    "title": "设备12",
    "align": "center",
    "key": "ORDER_TQ"
}]


希望得到的JSON

[{
  "dataIndex": "ORDER_CRAN",
  "ORDER_CRAN": 2425,    //从数组一匹配过来
  "width": 200,
  "title": "设备1",
  "align": "center",
  "key": "ORDER_CRAN"
},
  ...
]
阅读 1.9k
3 个回答
  for(let key in arrOne[0]) {
    for (let item of arrTwo) {
      if (item.dataIndex == key) {
        item[key] = arrOne[0][key]
        break
      }
    }
  }

相比之下,@MrBigShot 采用映射表查询的方式比 @玛拉_以琳 采用遍历的方式效率会高得多。只是没处理 arrOne[0][item.key] 可能为 undefined 的情况(当然如果前面的逻辑能保证不存在这种情况也是可以不处理的)。

const values = arrOne[0];  // 存个临时变量免得每次去做取属性计算
arrTwo.forEach(it => {
    if (it.key in values) {
        it[it.key] = values[it.key];
    }
});

arrTwo要用arrOne的第一行去匹配么

arrTwo.map(item => Object.assign(item, { [item.key]: arrOne[0][item.key]}))
推荐问题