我有一個2D陣列:
var array1 = [
["Jasper"/span>, "Diesel"/span>, "Grid"/span>, 2.7]。
["Delta", "Solar", "Grid", 10] 。
["Alpha"/span>, "Wind"/span>, "Grid", 20]
]
我想通過第一列對array1進行排序,使用:
var sortingArray = ["Alpha"/span>,"Jasper"/span>, "Delta]
所以它應該是這樣的:
var sortedArray = [
["Alpha", "Wind", "Grid", 20] 。
["Jasper", "Diesel", "Grid", 2.7] 。
["Delta"/span>, "Solar"/span>, "Grid"/span>, 10]
]
我已經嘗試使用下面的sort函式,但它根本沒有改變陣列。我是否不需要指定我想要排序的位置?
array1.sort(function (a, b) {
return sortingArray.indexOf(a)- sortingArray.indexOf(b)。
})
更新:自從發帖以來,我已經解決了這個問題。正如我所懷疑的,我確實需要提供我想要排序的位置。解決方案是:
array1.sort(function (a, b) {
return sortingArray.indexOf(a[0) - sortingArray. indexOf(b[0]) 。
})
uj5u.com熱心網友回復:
a和b是陣列,第一個元素是字串。你可以使用localeCompare字串方法比較字串:
array1.sort((a, b) =>/span> a[0] 。 localeCompare(b[0])
uj5u.com熱心網友回復:
array1.sort(function (a, b) {
return sortingArray.indexOf(a[0) - sortingArray. indexOf(b[0]) 。
})
uj5u.com熱心網友回復:
你可以將排序陣列減少為一個Map,以便快速查找。
const array1 = [
["Jasper", "Diesel", "Grid", 2.7],
["Delta", "Solar", "Grid", 10] 。
["Alpha"/span>, "Wind"/span>, "Grid", 20]
]
const sortingArray = ["Alpha", "Jasper", "Delta"] 。
/**。
* 通過一個值的串列對資料進行排序。
* @param {Object[]|Array[]}。data - 一個物件或陣列的陣列
* @param {String|Number} - 一個物件或陣列。fieldOrIndex - 一個欄位名或索引
* @param {String[]} - 一個欄位名或索引。order - 數值的排序順序
* @return {Object[]|Array[]} 排序的資料。
*/
const sortWith =(data, fieldOrIndex, order)=> {
const orderMap = order.reduce((acc, token, index) =>
acc.set(token, index), new Map)。)
return data.sort((a, b) =>
orderMap.get(a[fieldOrIndex]) - orderMap.get(b[fieldOrIndex]))。
};
const sorted = sortWith(array1, 0, sortingArray)。
console.log(sorted);
.as-console-wrapper { top。0; max-height: 100% ! important; }
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
如果您的串列或專案很小,您可以跳過地圖,直接抓取索引。
。const array1 = [
["Jasper", "Diesel", "Grid", 2.7],
["Delta", "Solar", "Grid", 10] 。
["Alpha"/span>, "Wind"/span>, "Grid", 20]
]
const sortingArray = ["Alpha", "Jasper", "Delta"] 。
/**。
* 通過一個值的串列對資料進行排序。
* @param {Object[]|Array[]}。data - 一個物件或陣列的陣列
* @param {String|Number} - 一個物件或陣列。fieldOrIndex - 一個欄位名或索引
* @param {String[]} - 一個欄位名或索引。order - 數值的排序順序
* @return {Object[]|Array[]} 排序的資料。
*/
const sortWith = (data, fieldOrIndex, order) =>
data.sort((a, b) =>/span>
order.indexOf(a[fieldOrIndex]) - order.indexOf(b[fieldOrIndex]))。
const sorted = sortWith(array1, 0, sortingArray)。
console.log(sorted);
.as-console-wrapper { top: 0; max-height: 100% ! important; }
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/310835.html
標籤:
