我有一個看起來像這樣的嵌套陣列:
[["Organisation","ID","Name"],["ACME","123456","Bart Simpson"],["ACME","654321","Ned Flanders"],["ACME","1234","Edna Kabappel"],["Yahoogle","666666","Bon Scott"],["Yahoogle","99999","Neil Young"],["Yahoogle","111111","Shania Twain"]]
每個陣列中的第一個值是 ID 和名稱可以屬于的組織的名稱。
我試圖找到最簡單的方法,將 ID 和名稱屬于同一公司的所有實體分組到一個“鍵”下。
所以上面的結果會是這樣的:
{
"ACME": [
{
"ID": 123456,
"Name": "Bart Simpson"
},
{
"ID": 654321,
"Name": "Ned Flanders"
},
{
"ID": 1234,
"Name": "Edna Kabappel"
}
],
"Yahoogle": [
{
"ID": 666666,
"Name": "Bon Scott"
},
{
"ID": 99999,
"Name": "Neil Young"
},
{
"ID": 111111,
"Name": "Shania Twain"
}
]
}
我一直在玩 for 回圈,但我最終得到了很多行代碼,試圖檢測公司名稱何時與之前的不同,并陷入真正的混亂。
我在這里搜索了很多試圖找到類似的東西,但沒有任何運氣。
大約 18 年后,我才剛剛開始重新編碼以激發個人興趣,而我又是一個新手。
預先感謝您的任何幫助。
uj5u.com熱心網友回復:
為了實作您想要的,您可以按照以下步驟操作:
- 創建一個物件來存盤您的結果。
- 在運行回圈時,您必須檢查組織名稱是否作為物件中的鍵存在,如果不存在則添加它,將其初始化為空陣列。然后將要存盤的結果推送到該陣列中。
下面是一個示例實作,假設您的資料存盤在data:
var result = {};
for(var i=1; i < data.length; i ){
if(!result.hasOwnProperty(data[i][0])){
result[data[i][0]] = [];
}
result[data[i][0]].push({ "ID": data[i][1], "Name": data[i][2]});
}
uj5u.com熱心網友回復:
使用Array.reduce。請檢查這是否適合您
const myArray = [
["Organisation", "ID", "Name"],
["ACME", "123456", "Bart Simpson"],
["ACME", "654321", "Ned Flanders"],
["ACME", "1234", "Edna Kabappel"],
["Yahoogle", "666666", "Bon Scott"],
["Yahoogle", "99999", "Neil Young"],
["Yahoogle", "111111", "Shania Twain"]
];
const obj = myArray.reduce((acc, value, index) => {
if (index === 0) return acc;
const key = value[0];
if (!acc[key]) {
acc[key] = [];
}
acc[key].push({
ID: value[1],
Name: value[2]
});
return acc;
}, {});
console.log(obj);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/370577.html
標籤:javascript 数组
