[英]How to convert nested object array to single array dynamically
// 我有這種多對象
_id: "5e5d00337c5e6a0444d00304"
orderID: 10355
orderDate: "2020-03-02"
user:
_id: "5e2e9699a648c53154f41025"
name: "xyz1"
email: "abcde@gmail.com"
mNumber: 12336
// 我想把它放在一個數組中
orderID: 10354, 10355
orderDate:"2020-03-02","2020-03-02"
name: "xyz", "xyz1"
email: "abcd@gmail.com", "abcde@gmail.com"
mNumber: 1234536, 12336
我的主要目標是獲取 Excel 表,在這些標題下,ID 名稱電子郵件等我得到這些數據。 喜歡
orderID orderDate name email mNumber
10354 2020-03-02 xyz abcd@gmail.com 1234536
10355 2020-03-02 xyz1 abcde@gmail.com 12336
這應該如何在 Angular 中完成?
如果我理解正確,你可以做這樣的事情,
objs = [
{
_id: "5e5d00337c5e6a0444d00304",
orderID: 10354,
orderDate: "2020-03-02",
user:
{
_id: "5e2e9699a648c53154f41025",
name: "xyz",
email: "abcd@gmail.com",
mNumber: 1234536
}
},
{
_id: "5e5d00337c5e6a0444d00304",
orderID: 10355,
orderDate: "2020-03-02",
user:
{
_id: "5e2e9699a648c53154f41025",
name: "xyz1",
email: "abcde@gmail.com",
mNumber: 12336
}
}
];
const arr = [];
for (const o of objs) {
arr.push([
o.orderID,
o.orderDate,
o.user.name,
o.user.email,
o.user.mNumber
]);
}
console.log(arr);
這是輸出,
[ [ 10354, '2020-03-02', 'xyz', 'abcd@gmail.com', 1234536 ],
[ 10355, '2020-03-02', 'xyz1', 'abcde@gmail.com', 12336 ] ]
基本上它只是一個迭代。
我將添加另一個解決方案。 在這種情況下,您不想描述行中的所有值,而是想描述行中不需要的值。 在這種情況下,您可以使用遞歸函數來遍歷對象。 fields
是您描述的值的對象,而女巫則沒有。 像這樣的東西。
const fields = { _id: false, user: { _id: false} }
function toRowRec(obj, fields) {
let row = [];
const keys = Object.keys(obj);
for (const k of keys) {
if (!fields.hasOwnProperty(k)) {
row.push(obj[k]);
} else if (typeof obj[k] === 'object' && obj[k] !== null) {
row = row.concat(toRowRec(obj[k], fields[k]));
}
}
return row;
}
let arr = []
for (const o of objs) {
arr.push(toRowRec(o, fields));
}
console.log(arr);
我省略了輸入objs
(與之前相同),您將獲得比以前更准確的輸出。
你會看到我也省略了我想放在行中的鍵,為此我只是檢查鍵是否在fields
對象中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.