围绕索引重新排列数组

Reorder an array around an index

本文关键字:排列 数组 新排列 索引      更新时间:2023-09-26

我的问题解释起来很简单,但要找到最有效的方法却很困难。

我正在尝试从数组中的某个特定索引开始对数组进行重新排序。

我所拥有的:

var array = [1,2,3,4,5];

我想要什么:

array = [3,4,5,1,2];

我所做的:

var array = [1,2,3,4,5];
var arr1 = array.slice(array.indexOf(3), array.length);
var arr2 = array.slice(0, array.indexOf(3));
arr1.push(arr2);
var newArray = arr1.join(); // [3,4,5,1,2];

正如你所看到的,对于一项看似简单的任务来说,还有很多事情要做。如果你对如何改进这一点有任何建议,我将不胜感激。香草JS或Underscore/Lodash都可以。

一行怎么样:

var array = array.slice(2, array.length).concat(array.slice(0, 2));

演示

这不会在最后得到一个平面阵列:

arr1.push(arr2);
var newArray = arr1.join();

您需要做的是将方法称为Array.prototype.concat

var newArray = arr1.concat(arr2);

更像功能的方法:

var reorder = function(array, index) {
  return _.flatten(_.partition(array, function(v, i) {return i < index}).reverse())
};
reorder([1,2,3,4,5], 3);

或者,您可以使用_.union.apply(null, ...)来代替_.flatten

使用下划线的一个简单方法是使用firstrest函数并连接结果。这是一个可以做到这一点的混合体:

    _.mixin( { reorder: function(list, index){
        return _.rest(list,index).concat(_.first(list,index));
    }});
    var result = _.reorder(array, 3)