围绕索引重新排序数组

时间:2015-06-23 09:59:25

标签: javascript arrays underscore.js lodash

我的问题很容易解释,但找出最有效的方法却很困难。

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

我有什么:

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都可以。

4 个答案:

答案 0 :(得分:3)

一行怎么样:

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

DEMO

答案 1 :(得分:1)

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

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

您需要做的是调用方法Array.prototype.concat

var newArray = arr1.concat(arr2);

答案 2 :(得分:1)

更像功能的方法:

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

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

答案 3 :(得分:1)

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

    _.mixin( { reorder: function(list, index){
        return _.rest(list,index).concat(_.first(list,index));
    }});

    var result = _.reorder(array, 3)