繁体   English   中英

如何在 JavaScript 中转换和重新排序数组?

[英]How to transform and reorder array in JavaScript?

有没有一种优雅的方式来重新排序 JavaScript 数组? 例如,说我有一个这样的数组:

let array = ['a', 'b', 'c']

现在我想将其重新排列为

['b', 'a', 'a', 'c', 'a']

在 JavaScript 中是否有内置的高阶函数可以做到这一点? 就像是

let reordered = array.reorderMagic([1, 0, 0, 2, 0])

我可以在哪里指定一个索引数组? 如果没有,您能否建议一个可以帮助我进行此类矩阵式操作的库?

你可以在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);

您可以在 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它们。

 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"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM