我正在尋找一種以特定順序對嵌套陣列的下方陣列重新排序的方法。匯入時,exposureLevel 陣列中的值按任意順序排列。
var exposureLevel = [["Exposure Level","Number"],["High",15],["Low",38],["Medium",105],["None",156]];
其中一些值也可能從 ExposureLevel 陣列中丟失。下面是一些可能的例子:
[["Exposure Level","Number"],["Low",38],["Medium",105]];
[["Exposure Level","Number"],["High",15],["None",156]];
[["Exposure Level","Number"],["High",15],["Medium",105],["None",156]];
我希望陣列按下面的順序排列,從標題后的 [1] 元素開始None, Low, Medium, High。下面的三個陣列顯示了我希望上面三個示例如何輸出。我不完全確定如何執行此操作,但我必須進行某種型別的檢查,其中比較子陣列中的字串值并調整整個子陣列在父陣列中的位置。
[["Exposure Level","Number"],["Low",38],["Medium",105]];
[["Exposure Level","Number"],["None",156],["High",15]];
[["Exposure Level","Number"],["None",156],["Medium",105],["High",15]];
我在發布之前看過這些帖子,但沒有取得很大的成功:
- 在 JavaScript 中的陣列上的 For-each
- JOLT - 對嵌套陣列重新排序
- 如何檢查陣列是否包含 JavaScript 中的值?
- Javascript陣列包含/包含子陣列
我目前的解決方案:
for (let i = 0; i < exposureLevel.length; i ) {
if(exposureLevel[i][0] == "None"){
console.log(exposureLevel[i][0])
}
if(exposureLevel[i][0] == "Low"){
console.log(exposureLevel[i][0])
}
if(exposureLevel[i][0] == "Medium"){
console.log(exposureLevel[i][0])
}
if(exposureLevel[i][0] == "High"){
//not sure how to push onto array correctly
console.log(exposureLevel[i][0])
}
}
我知道我當前的解決方案沒有做任何事情,但我已經設法隔離了每個子陣列中的字串。下一步是將整個陣列按指定的順序推送到一個新陣列中。如果有人知道執行上述操作的更好方法,請告訴我。
我對JS的經驗很少。如果有人可以幫助我解決這個問題或為我指明正確的方向,我將不勝感激。如果需要任何進一步的資訊,請告訴我。謝謝。
uj5u.com熱心網友回復:
Array.sort 將鍵映射到另一個設定 orders
const exposureLevel = [["Exposure Level","Number"],["High",15],["Low",38],["Medium",105],["None",156]];
const orders = { None: 1, Low: 2, Medium: 3, High: 4 };
const sorted = exposureLevel.sort((a, b) => (orders[a[0]] || 0) - (orders[b[0]] || 0));
console.log(sorted);
參考:Array.sort()
uj5u.com熱心網友回復:
使用一個物件來定義您的排序順序,并在您的比較器中使用它:
const o = {None: 0, Low: 1, Medium: 2, High: 3};
const sort = ([h, ...v]) => [h, ...v.sort(([l1], [l2]) => o[l1] - o[l2])];
console.log(sort([["Exposure Level","Number"],["Low",38],["Medium",105]]));
console.log(sort([["Exposure Level","Number"],["High",15],["None",156]]));
console.log(sort([["Exposure Level","Number"],["High",15],["Medium",105],["None",156]]));
uj5u.com熱心網友回復:
使用Array.sort該陣列進行排序。
邏輯
- 使用參考陣列
order來跟蹤輸出順序。 - 根據參考
order陣列中標簽的索引對陣列進行排序。
const order = ["Exposure Level", "None", "Low", "Medium", "High"];
var exposureLevel = [
["Exposure Level","Number"],
["High",15],
["Low",38],
["Medium",105],
["None",156],
];
exposureLevel.sort((a, b) => {
// Should return -1, 0 or 1
if (order.indexOf(a[0]) > order.indexOf(b[0])) return 1;
else if (order.indexOf(a[0]) < order.indexOf(b[0])) return -1;
else return 0;
});
console.log(exposureLevel);
一個班輪解決方案
const order = ["Exposure Level", "None", "Low", "Medium", "High"];
const exposureLevel = [["Exposure Level","Number"], ["High",15], ["Low",38], ["Medium",105], ["None",156]];
exposureLevel.sort((a, b) => order.indexOf(a[0]) - order.indexOf(b[0]));
console.log(exposureLevel);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364807.html
標籤:javascript 数组 for循环
上一篇:指向char的指標陣列的大小
