我想通過 gkey 合并 2 個具有相同欄位的陣列,但我不想覆寫我正在使用 map() 和 find() 的第一個陣列貓科動物,但它會覆寫第一個陣列和未定義的行
這是我的代碼
let x = [{id:1 , name: "hi", gkey: 6,np:1000, op:0}
,{id:2 , name: "hello", gkey: 7,np:5000, op:0}
,{id:3 , name: "h", gkey: 8,np:3000, op:0}];
let y = [{id:11,name: "hi" ,gkey:6,np:0,op:100},{id:22,name:"hi",gkey:8,np:0,op:800},];
var marr = x.map(i => y.find(s => s.gkey === i.gkey))
console.log(marr);
這是我的結果:

我想要這樣的合并資料結果:
{id:1 , name: "hi", gkey: 6,np:1000, op:100}
{id:2 , name: "hello", gkey: 7,np:5000, op:0}
{id:3 , name: "h", gkey: 8,np:3000, op:800}
任何解決方案?
uj5u.com熱心網友回復:
其他解決方案很好,但我想知道如果操作真的是合并操作,并且 y 陣列包含的專案比 x 多,該怎么辦。
let x = [
{ id: 1, name: "hi", gkey: 6, np: 1000, op: 0 },
{ id: 2, name: "hello", gkey: 7, np: 5000, op: 0 },
{ id: 3, name: "h", gkey: 8, np: 3000, op: 0 },
];
let y = [
{ id: 11, name: "hi", gkey: 6, np: 0, op: 100 },
{ id: 22, name: "hi", gkey: 8, np: 0, op: 800 },
{ id: 33, name: "new entry in Y arr", gkey: 8, np: 0, op: 5545 },
];
let result = x.concat(y)
.reduce((acc, current) =>
{
let found = acc.find((i) => i["gkey"] === current["gkey"]);
if (found) {
found.op = current["op"];
return acc;
}
acc.push(current);
return acc;
}, []);
console.log(result);
uj5u.com熱心網友回復:
您的代碼幾乎就在那里,但必須創建并回傳一個合并的物件:
let x = [{id:1 , name: "hi", gkey: 6,np:1000, op:0}
,{id:2 , name: "hello", gkey: 7,np:5000, op:0}
,{id:3 , name: "h", gkey: 8,np:3000, op:0}];
let y = [{id:11,name: "hi" ,gkey:6,np:0,op:100},{id:22,name:"hi",gkey:8,np:0,op:800},];
var marr = x.map(elX => {
const elY = y.find(s => s.gkey === elX.gkey);
return { ...elX, np: elX.np (elY?.np ?? 0), op: elX.op (elY?.op ?? 0) };
});
console.log(marr);
uj5u.com熱心網友回復:
將 y 的元素單獨插入 x ,如下面的代碼:
let x = [{id:1 , name: "hi", gkey: 6,np:1000, op:0}
,{id:2 , name: "hello", gkey: 7,np:5000, op:0}
,{id:3 , name: "h", gkey: 8,np:3000, op:0}];
let y = [{id:11,name: "hi" ,gkey:6,np:0,op:100},{id:22,name:"hi",gkey:8,np:0,op:800},];
y.forEach(element => {
x.push(element)
});
console.log(x);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/443232.html
標籤:javascript 数组
