我有一個看起來像這樣的物件陣列
{name:"name1", phoneNumbers:[{"home":"0700 999999"}, {"mobile":"0700 999998"}]}, {name:"name2", phoneNumbers:[{"home":"0700 999991"}, {"mobile":"0700 999995"}, fax:"48289299200"]},
{name:"name3", phoneNumbers:[{"home":"0700 999992"}, {"mobile":"0700 999988"}]}
]
我想要實作的是這樣的
{name:"name1", phoneNumbers:[{"home":"0700 999999"}]},
{name:"name1", phoneNumbers:[{"mobile":"0700 999998"}]},
{name:"name2", phoneNumbers:[{"home":"0700 999991"}]},
{name:"name2", phoneNumbers:[{"mobile":"0700 999995"}]},
{name:"name2", phoneNumbers:[{fax:"48289299200"}]},
...
]
這樣,每個名稱將再次列出,并附有每個聯系方式。
我采用這種方式,我發現使解決方案起作用具有挑戰性,因為外回圈不會等待內回圈徹底運行,然后才能繼續下一個索引:
const doSomeRecursion=(arr, i, result)=>{
for(let j=0; j<arr[i]["phoneNumbers"].length; j ){
arr[i]["phoneNumbers"]=[arr[i]["phoneNumbers"][j]]
result.push(arr[i])
}
}
const getAllContacts=(contacts)=>{
const reconstructedContacts=[]
for(let i=0; i<contacts.length; i ){
doSomeRecursion(contacts, i, reconstructedContacts)
}
return reconstructedContacts
}
首先,這種方法應該給我想要的結果,但我不知道為什么不。我也認為我的解決方案可能不是最好的方法,我很想知道你們會如何解決這個問題?
編輯:謝謝,@TJ Crowder,我已經更正了問題并將其包裝在一個函式中。
uj5u.com熱心網友回復:
您問題中的初始代碼塊有多個語法錯誤,因此很難確定您的起始結構是什么,但對其進行合理猜測,這里根本不需要遞回,只需嵌套回圈:
const result = [];
for (const {name, phoneNumbers} of original) {
for (const number of phoneNumbers) {
result.push({name, phoneNumbers: number});
}
}
現場示例:
顯示代碼片段
const original = [
{
name: "name1",
phoneNumbers: [
{ "home": "0700 999999" },
{ "mobile": "0700 999998" }
]
},
{
name: "name2",
phoneNumbers: [
{ "home": "0700 999991" },
{ "mobile": "0700 999995" },
{fax: "48289299200"}
]
},
{
name: "name3",
phoneNumbers: [
{ "home": "0700 999992" },
{ "mobile": "0700 999988" }
]
}
];
const result = [];
for (const {name, phoneNumbers} of original) {
for (const number of phoneNumbers) {
result.push({name, phoneNumbers: number});
}
}
console.log(JSON.stringify(result, null, 4));
uj5u.com熱心網友回復:
你也可以使用的組合實作這一點flatMap(),并map()
const data = [
{name:"name1", phoneNumbers:[{"home":"0700 999999"}, {"mobile":"0700 999998"}]},
{name:"name2", phoneNumbers:[{"home":"0700 999991"}, {"mobile":"0700 999995"},
{"fax":"48289299200"}]},
{name:"name3", phoneNumbers:[{"home":"0700 999992"}, {"mobile":"0700 999988"}]}
];
const result = data.flatMap((n) => {
return n.phoneNumbers.map((pn) => {
return { name: n.name, phoneNumbers: [pn] }
});
});
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/370630.html
標籤:javascript 数组 for循环 目的
上一篇:為什么當我們用let定義for回圈變數時,不使用IFFE技術,我們可以將它的特定值設定為函式而不會丟失它?[復制]
