开发者问题收集

Javascript / Typescript从一个嵌套数组更新另一个嵌套数组中的数据

2019-01-17
658

我的初始数组是这样的:

 preData = [
    ['APP_NOT_RUNNING', 0],
    ['FALLBACK', 0],
    ['IDLE', 0],
    ['OUTOFSERVICE', 0]
];

带有值的数组是这样的:

preData = [
    ['APP_NOT_RUNNING', 2],
    ['IDLE', 3],
];

我想从第二个数组更新第一个数组的值,结果为:

  finalData= [
        ['APP_NOT_RUNNING', 2],
        ['FALLBACK', 0],
        ['IDLE', 3],
        ['OUTOFSERVICE', 0]
    ];

我将不胜感激任何帮助

3个回答

您可以使用数组的 Map().forEach() 方法:

let arr1 = [
    ['APP_NOT_RUNNING', 0],
    ['FALLBACK', 0],
    ['IDLE', 0],
    ['OUTOFSERVICE', 0]
];

let arr2 = [
    ['APP_NOT_RUNNING', 2],
    ['IDLE', 3],
];

let updateArray = (a1, a2, map = new Map()) => {
  a1.forEach(arr => map.set(arr[0], arr));
  a2.forEach(arr => map.set(arr[0], arr));
  
  return [...map.values()];
};

console.log(updateArray(arr1, arr2));
.as-console-wrapper { max-height: 100% !important; top: 0; }
Mohammad Usman
2019-01-17

可能的解决方案之一是将初始数组转换为 Map ,更新它并将其转换回数组:

const preData = [
    ['APP_NOT_RUNNING', 0],
    ['FALLBACK', 0],
    ['IDLE', 0],
    ['OUTOFSERVICE', 0]
];

const valueData = [
    ['APP_NOT_RUNNING', 2],
    ['IDLE', 3],
];

const map = new Map(preData);

for (const [key, value] of valueData) {
    map.set(key, value);
}

const result = Array.from(map);
console.log(result);

更新 - 类型可能是:

const preData: ReadonlyArray<[string, number]> = [
    ['APP_NOT_RUNNING', 0],
    ['FALLBACK', 0],
    ['IDLE', 0],
    ['OUTOFSERVICE', 0]
];

const valueData: Array<[string, number]> = [
    ['APP_NOT_RUNNING', 2],
    ['IDLE', 3],
];
Aleksey L.
2019-01-17

将索引为“0”的第二个数组 actualData 内容与原始数组 preData 索引为“0”进行匹配。如果匹配,则将索引为“1”(值)的 actualData 内容复制到原始数组中。

var preData = [
    ['APP_NOT_RUNNING', 0],
    ['FALLBACK', 0],
    ['IDLE', 0],
    ['OUTOFSERVICE', 0]
];
var actualData = [
    ['APP_NOT_RUNNING', 2],
    ['IDLE', 3],
];

preData.forEach((ele, idx, arr) =>{
        actualData.forEach(item =>{
                       if(item[0] === ele[0]){
                           ele[1] = item[1];
                           arr[idx] = ele;
                        }
                   });
});
console.log(preData);
Fullstack Guy
2019-01-17