我的初始数组是这样的:
preData = [
['APP_NOT_RUNNING', 2],
['IDLE', 3],
];
具有值的数组是这样的:
finalData= [
['APP_NOT_RUNNING', 2],
['FALLBACK', 0],
['IDLE', 3],
['OUTOFSERVICE', 0]
];
我想从第二个数组中更新第一个数组的值,即结果:
{{1}}
我将不胜感激
答案 0 :(得分:2)
您可以使用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; }
答案 1 :(得分:1)
一种可能的解决方案是将初始数组转换为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],
];
答案 2 :(得分:0)
将索引“ 0”的第二个数组actualData
的内容与原始数组preData
索引“ 0”匹配。如果匹配,则将actualData
的索引“ 1”(值)的内容复制到原始数组中。
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);
答案 3 :(得分:0)
您将需要遍历preData数组,并检查ActualData数组中每个值是否存在一个值。如果不是,则将默认值valye推送到finalData数组,如果是,则添加值,然后推送它。
使用 forEach 遍历preData数组,并使用 filter 检查preData中每个值是否存在数据。
const preData = [
['APP_NOT_RUNNING', 0],
['FALLBACK', 0],
['IDLE', 0],
['OUTOFSERVICE', 0]
];
const actualData = [
['APP_NOT_RUNNING', 2],
['IDLE', 3],
];
const finalData = [];
preData.forEach(preDataValue => {
const index = finalData.push(preDataValue);
const data = actualData.filter(d => d[0] === preDataValue[0]);
if (data.length) {
finalData[index-1][1] += data[0][1];
}
});
console.log(finalData);
答案 4 :(得分:0)
我们可以使用.map
和.find
preData = [
['APP_NOT_RUNNING', 0],
['FALLBACK', 0],
['IDLE', 0],
['OUTOFSERVICE', 0]
];
preData2 = [
['APP_NOT_RUNNING', 2],
['IDLE', 3],
];
const finalData = preData.map(x=>{
const found = preData2.find(y=>y[0]===x[0])
if(found)
x[1] = found[1]
return x;
})
console.log(finalData);