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