有沒有一種優雅的方式來重新排序 JavaScript 陣列?例如,說我有一個這樣的陣列:
let array = ['a', 'b', 'c']
現在我想將其重新排列為
['b', 'a', 'a', 'c', 'a']
在 JavaScript 中是否有內置的高階函式可以做到這一點?就像是
let reordered = array.reorderMagic([1, 0, 0, 2, 0])
我可以在哪里指定一個索引陣列?如果沒有,您能否建議一個可以幫助我進行此類矩陣式操作的庫?
uj5u.com熱心網友回復:
你可以創建一個方法Array.prototype雖然不推薦
閱讀:JavaScript:擴展 Array.prototype 有什么危險?
if (!('reorderMagic' in Array.prototype)) {
Array.prototype.reorderMagic = function(ref) {
const arr = this;
return ref.map((n) => arr[n]);
};
}
let array = ["a", "b", "c"];
let reordered = array.reorderMagic([1, 0, 0, 2, 0]);
console.log(reordered);
But I won't recommend that because there might be a scenario where someone or any library might override your method(This is just one scenario)
因此,您可以創建一個實用程式函式并獲得所需的結果:
function reorderMagic(arr, ref) {
return ref.map((n) => arr[n]);
}
let array = ["a", "b", "c"];
let reordered = reorderMagic(array, [1, 0, 0, 2, 0]);
console.log(reordered);
uj5u.com熱心網友回復:
您可以在 Array.prototype 上創建一個方法
擴展Array.prototype被認為是不好的做法,但解決方案的其余部分效果很好。
我會推薦這樣的 API:
function chooseIndices(arr, indexes) {
return indexes.map(i => arr[i]);
}
然后這樣使用它:
let array = ["a", "b", "c"];
let reordered = chooseIndices(array, [1, 0, 0, 2, 0]);
// reordered === ['b', 'a', 'a', 'c', 'a']
警告:
上面的函式不考慮無效索引。例如,如果你5在上面的例子中使用索引,你只會得到一個undefined。
您可以決定如何處理無效索引。但一種選擇是filter在使用索引陣列之前將它們簡單化。
uj5u.com熱心網友回復:
const arr = ['a','b','c'];
const order = [1, 0, 0, 2, 0];
const reorderMagic = (arr, indexes) => indexes.map((i) => arr[i]);
console.log(reorderMagic(arr, order));
// [ "b","a","a","c","a"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/353755.html
標籤:javascript 数组 高阶函数
上一篇:顯示除產品ID32之外的所有WooCommerce產品的自定義復選框
下一篇:每秒從api獲取資料
