我正在嘗試將物件從一個陣列移動到七個不同的陣列中。它們從一開始就在一個陣列中。我想根據另一個陣列中具有一個相關屬性的值對它們進行排序。
我要排序的陣列 1
var serialList = [
{
"OrderNumber": "1",
"ArticleNumber": "CLIENT",
"SerialNumber": "111"
},
{
"OrderNumber": "2",
"ArticleNumber": "IPAD",
"SerialNumber": "222"
},
{
"OrderNumber": "3",
"ArticleNumber": "PHONE",
"SerialNumber": "333"
},
{
"OrderNumber": "4",
"ArticleNumber": "SWITCH",
"SerialNumber": "444"
},
{
"OrderNumber": "5",
"ArticleNumber": "HARDWARE",
"SerialNumber": "555"
},
{
"OrderNumber": "6",
"ArticleNumber": "MAC",
"SerialNumber": "666"
},
{
"OrderNumber": "7",
"ArticleNumber": "PRINTER",
"SerialNumber": "777"
},
{
"OrderNumber": "8",
"ArticleNumber": "MAC",
"SerialNumber": "888"
}
];
我要比較的陣列
var articleNumberList = [
{
"Article": "CLIENT",
"Model": "client"
},
{
"Article": "IPAD",
"Model": "ipad"
},
{
"Article": "PHONE",
"Model": "phone"
},
{
"Article": "SWITCH",
"Model": "switch"
},
{
"Article": "HARDWARE",
"Model": "hardware"
},
{
"Article": "MAC",
"Model": "mac",
}, {
"Article": "PRINTER",
"Model": "printer"
}
];
我想檢查第一個陣列屬性 ArticleNumber 并將其與第二個陣列屬性 Article 進行比較。一旦找到匹配項,將其排序到另一個陣列中,對應于 Article 屬性
我嘗試過的(目前正在作業)
for (i = 0; i < serialList.length; i ) {
for (u = 0; u < articleNumberList.length; u ) {
if (serialList[i].ArticleNumber == articleNumberList[u].Article) {
if (serialList[i].ArticleNumber == "CLIENT") {
clientList.push(serialList[i]);
} else if (serialList[i].ArticleNumber == "IPAD") {
ipadList.push(serialList[i]);
} else if (serialList[i].ArticleNumber == "PHONE") {
phoneList.push(serialList[i]);
} else if (serialList[i].ArticleNumber == "SWITCH") {
switchList.push(serialList[i]);
} else if (serialList[i].ArticleNumber == "HARDWARE") {
hardwareList.push(serialList[i]);
} else if (serialList[i].ArticleNumber == "MAC") {
macList.push(serialList[i]);
} else if (serialList[i].ArticleNumber == "PRINTER") {
printerList.push(serialList[i]);
}
}
}
};
為什么我不想使用這個解決方案:它是一個嵌套的for回圈,最終將用于各種硬體的資料庫,陣列serialList今天有幾千長并且會繼續增長,陣列articleNumberList是目前在 40 左右,并且還將繼續增長。我也不太喜歡 IF、ELSE IF 陳述句,我覺得它可能可以用 array.filter() 處理,但我真的不知道如何處理它。
uj5u.com熱心網友回復:
如果您有一個有效文章型別的串列,則可以初始化一個包含一系列序列專案陣列的映射(存盤桶)。
注意:您不應為每個串列創建一個變數。只需將每個串列存盤在以型別為鍵的映射中。
const serialList = [
{ "OrderNumber": "1", "ArticleNumber": "CLIENT", "SerialNumber": "111" },
{ "OrderNumber": "2", "ArticleNumber": "IPAD","SerialNumber": "222" },
{ "OrderNumber": "3", "ArticleNumber": "PHONE", "SerialNumber": "333" },
{ "OrderNumber": "4", "ArticleNumber": "SWITCH", "SerialNumber": "444" },
{ "OrderNumber": "5", "ArticleNumber": "HARDWARE", "SerialNumber": "555" },
{ "OrderNumber": "6", "ArticleNumber": "MAC", "SerialNumber": "666" },
{ "OrderNumber": "7", "ArticleNumber": "PRINTER", "SerialNumber": "777" },
{ "OrderNumber": "8", "ArticleNumber": "MAC", "SerialNumber": "888"}
];
const articleNumberList = [
{ "Article": "CLIENT", "Model": "client" },
{ "Article": "IPAD", "Model": "ipad" },
{ "Article": "PHONE", "Model": "phone" },
{ "Article": "SWITCH", "Model": "switch" },
{ "Article": "HARDWARE", "Model": "hardware" },
{ "Article": "MAC", "Model": "mac", },
{ "Article": "PRINTER", "Model": "printer" }
];
const buckets = articleNumberList
.reduce((acc, { Article }) => acc.set(Article, []), new Map);
for (let serialItem of serialList) {
buckets.get(serialItem.ArticleNumber)?.push(serialItem);
}
console.log(Object.fromEntries([...buckets]));
console.log(buckets.get('MAC')); // Get only the MAC items
.as-console-wrapper { top: 0; max-height: 100% !important; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/526579.html
上一篇:Logstash無法索引到ES:`action[indices:admin/auto_create]對用戶來說是未經授權的`
