我得到一個看起來像這樣的陣列物件。我的目標是根據重復鍵組合或合并它們。
documents: [
{
image: 'sample image 1',
id_side: 'Front',
type: 'Passport'
},
{
image: 'sample image 2',
id_side: 'Back',
type: 'Passport'
},
{
image: 'sample image 3',
id_side: 'Back',
type: 'License'
}
]
我怎樣才能把它安排成這樣?
documents: [
{
documentType: 'Passport',
requiredDocs: [
{
image: 'sample image 1',
id_side: 'Front',
type: 'Passport'
},
{
image: 'sample image 2',
id_side: 'Back',
type: 'Passport'
}
]
},
{
documentType: 'License',
requiredDocs: [
{
image: 'sample image 3',
id_side: 'Back',
type: 'License'
}
]
}
]
我發現了一個類似的問題,但我似乎無法讓它在我的情況下作業。請參閱此鏈接中的類似問題: 如何根據重復鍵合并/組合物件陣列?
uj5u.com熱心網友回復:
你可以用這個實作你的輸出
const documents = [
{
image: "sample image 1",
id_side: "Front",
type: "Passport"
},
{
image: "sample image 2",
id_side: "Back",
type: "Passport"
},
{
image: "sample image 3",
id_side: "Back",
type: "License"
}
];
let output = {};
documents.forEach((docs) => {
if (output[docs.type]) {
output[docs.type].requiredDocs.push(docs);
} else {
output[docs.type] = {
documentType: docs.type,
requiredDocs: [docs]
};
}
});
console.log(Object.values(output));
uj5u.com熱心網友回復:
用于reduce()創建一個累積物件,然后map()將該物件的條目轉換為您想要的輸出格式:
const data = [{
image: 'sample image 1',
id_side: 'Front',
type: 'Passport'
}, {
image: 'sample image 2',
id_side: 'Back',
type: 'Passport'
}, {
image: 'sample image 3',
id_side: 'Back',
type: 'License'
}];
const result = Object.entries(data.reduce((a, v) => ({
...a,
[v.type]: [...a[v.type] || [], v]
}), {})).map(([documentType, requiredDocs]) => ({
documentType,
requiredDocs
}));
console.log(result);
uj5u.com熱心網友回復:
這假定您要處理的密鑰是type. 構建從型別到所有相關物件的物件映射,然后map將其轉換為所需的格式。
const obj={documents:[{image:'sample image 1',id_side:'Front',type:'Passport'},{image:'sample image 2',id_side:'Back',type:'Passport'},{image:'sample image 3',id_side:'Back',type:'License'}]};
let types = obj.documents.reduce((a, { type, ...r }) => {
a[type] = a[type] || [];
a[type].push({ type, ...r });
return a;
}, {});
let result = Object.entries(types).map(([ documentType, requiredDocs ]) => ({ documentType, requiredDocs }));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: auto; }
uj5u.com熱心網友回復:
首先,您可以使用 Object {} 存盤為鍵值對,以便將唯一項視為鍵:
const data = [{
image: 'sample image 1',
id_side: 'Front',
type: 'Passport'
}, {
image: 'sample image 2',
id_side: 'Back',
type: 'Passport'
}, {
image: 'sample image 3',
id_side: 'Back',
type: 'License'
}];
const Obj = {}, arr = []
data.forEach(element => {
if (Obj[element.type]) Obj[element.type].push(element)
else Obj[element.type] = [element]
})
for (const eachType in Obj) {
arr.push({ documentType: eachType, requiredDocs: Obj[eachType] })
}
console.log(arr)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/491814.html
標籤:javascript 数组 排序 目的 javascript 对象
上一篇:每2秒后將影像添加到DOM
