我有一個陣列物件,如下所示 -
var inputArray=[
{
id: 86317,
code: 'ee78',
G1: 0,
G2: 1,
P1: 0,
P3: 0
},
{
id: 71989,
code: '703a',
G1: 2
},
{
id: 28285,
code: 're53',
G1: 1
},
{ id: 35022, code: 'cdv3', G2: 3 },
{
id: 86317,
code: 'uty4',
G1: 2,
G2: 1,
P1: 0,
P3: 2
}
]
我的問題是如何將具有相似 id 的物件資料插入一個名為的子陣列中data,并且在data陣列內部會有具有相同父 id 的物件(代碼、G1、G2、P1、P2 等)。輸出如下所示 -
var outputArray=[
{
id: 86317,
data: [
{
code: 'ee78',
G1: 0,
G2: 1,
P1: 0,
P3: 0
},
{
code: 'uty4',
G1: 2,
G2: 1,
P1: 0,
P3: 2
},
],
},
{
id: 71989,
data: [
{
code: '703a',
G1: 2
}]
},
{
id: 28285,
data: [{
code: 're53',
G1: 1
}]
},
{
id: 35022,
data: [{
code: 'cdv3',
G2: 3
}]
}
]
代碼 -
var newarr = []
var outputArray = inputArray.forEach((ele) => {
let m = newarr.find(e => { return e.id === ele.id })
if (!m) {
m = {
id: ele.id,
data:[
{code:ele.code,
G1:ele.G1,
G2:ele.G2,
P1:ele.P1,
P3:ele.P3}
]
}
}
newarr.push(m)
})
uj5u.com熱心網友回復:
可以試試下面的代碼
var inputArray=[
{
id: 86317,
code: 'ee78',
G1: 0,
G2: 1,
P1: 0,
P3: 0
},
{
id: 71989,
code: '703a',
G1: 2
},
{
id: 28285,
code: 're53',
G1: 1
},
{ id: 35022, code: 'cdv3', G2: 3 },
{
id: 86317,
code: 'uty4',
G1: 2,
G2: 1,
P1: 0,
P3: 2
}
]
var uniqueIds= [...new Set(inputArray.map(val=>val.id))]
var outputArray = uniqueIds.map(id=>{
return {id:id,data:inputArray.filter(obj=>{
if(obj.id ===id)
{
delete obj.id;
return obj;
}
})}
})
console.log(outputArray)
uj5u.com熱心網友回復:
您可以使用 loadash 在幾行內完成此操作。請找到以下解決方案的作業鏈接: 代碼沙箱鏈接
這里也是實作相同的代碼
import groupBy from "lodash/groupBy";
import map from "lodash/map";
const sample = [
{
id: 86317,
code: "ee78",
G1: 0,
G2: 1,
P1: 0,
P3: 0
},
{
id: 71989,
code: "703a",
G1: 2
},
{
id: 28285,
code: "re53",
G1: 1
},
{ id: 35022, code: "cdv3", G2: 3 },
{
id: 86317,
code: "uty4",
G1: 2,
G2: 1,
P1: 0,
P3: 2
}
];
const result = map(groupBy(sample, "id"), (item) => {
const obj = {
id: item[0].id,
data: []
};
item.forEach((data) => {
delete data?.id;
obj.data.push(data);
});
return obj;
});
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512791.html
上一篇:有條件地使用來自同一物件的屬性
