我有一個看起來像這樣的物件陣列(一個示例) -
let arrTable = [
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 1"},
{ tableName: "name 2", tableDesc:"desc 2", tableFooter:"footer 2"},
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 3"},
{ tableName: "name 3", tableDesc:"desc 3", tableFooter:"footer 4"},
{ tableName: "name 4", tableDesc:"desc 4", tableFooter:"footer 5"},
{ tableName: "name 5", tableDesc:"desc 5", tableFooter:"footer 6"},
{ tableName: "name 6", tableDesc:"desc 6", tableFooter:"footer 7"},
];
我想洗掉具有相同tableName 的重復項,但將tableFooter連接到那些不會被洗掉的重復項中。
例如,預期的物件陣列應該是 -
let newTable = [
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 1 footer 3"},
{ tableName: "name 2", tableDesc:"desc 2", tableFooter:"footer 2"},
{ tableName: "name 3", tableDesc:"desc 3", tableFooter:"footer 4"},
{ tableName: "name 4", tableDesc:"desc 4", tableFooter:"footer 5"},
{ tableName: "name 5", tableDesc:"desc 5", tableFooter:"footer 6"},
{ tableName: "name 6", tableDesc:"desc 6", tableFooter:"footer 7"},
];
我已經檢查了有關如何洗掉重復項的其他問題,但是否有一種更簡單的方法來連接鍵而不必運行 for 回圈并檢查相同的 tableName 并創建一個將 tableFooter 保存為一個的新鍵?
uj5u.com熱心網友回復:
我建議使用Array.reduce()來獲得所需的輸出。
我們為每個 tableName 創建一個具有屬性的物件,如果它已經存在,我們將附加 tableFooter 值。
let arrTable = [
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 1"},
{ tableName: "name 2", tableDesc:"desc 2", tableFooter:"footer 2"},
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 3"},
{ tableName: "name 3", tableDesc:"desc 3", tableFooter:"footer 4"},
{ tableName: "name 4", tableDesc:"desc 4", tableFooter:"footer 5"},
{ tableName: "name 5", tableDesc:"desc 5", tableFooter:"footer 6"},
{ tableName: "name 6", tableDesc:"desc 6", tableFooter:"footer 7"},
];
let newTable = Object.values(arrTable.reduce((acc, { tableName, tableFooter, ...rest}) => {
if (!acc[tableName]) {
acc[tableName] = { tableName, ...rest, tableFooter};
} else {
acc[tableName].tableFooter = ` ${tableFooter}`;
}
return acc;
}, {}))
console.log(newTable)
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
您需要另一個陣列,您可以在其中在修改重復項時推送非重復項。
這似乎有效:
let arrTable = [
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 1"},
{ tableName: "name 2", tableDesc:"desc 2", tableFooter:"footer 2"},
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 3"},
{ tableName: "name 3", tableDesc:"desc 3", tableFooter:"footer 4"},
{ tableName: "name 4", tableDesc:"desc 4", tableFooter:"footer 5"},
{ tableName: "name 5", tableDesc:"desc 5", tableFooter:"footer 6"},
{ tableName: "name 6", tableDesc:"desc 6", tableFooter:"footer 7"},
];
let result = [];
arrTable.forEach((entry) => {
// if the entry already exists, we just update its footer...
// if you still need the original, make sure to make a copy of the entry here
let existingEntry = result.find((e) => entry.tableName === e.tableName);
if (existingEntry) {
existingEntry.tableFooter = entry.tableFooter;
} else {
// new entries are added as they are
result.push(entry);
}
});
console.log('RESULT', result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/355588.html
標籤:javascript 数组 排序
上一篇:檢測到堆損壞(動態陣列)
