围绕索引重新排序数组
Reorder an array around an index
我的问题很容易解释,但事实证明找出最有效的方法很困难。
我正在尝试从数组中的特定索引开始对数组重新排序。
我有:
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
使用下划线的一个很好的简单方法是使用 first and rest 函数并连接结果。这是一个可以做到这一点的 mixin:
_.mixin( { reorder: function(list, index){
return _.rest(list,index).concat(_.first(list,index));
}});
var result = _.reorder(array, 3)
我的问题很容易解释,但事实证明找出最有效的方法很困难。
我正在尝试从数组中的特定索引开始对数组重新排序。
我有:
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
使用下划线的一个很好的简单方法是使用 first and rest 函数并连接结果。这是一个可以做到这一点的 mixin:
_.mixin( { reorder: function(list, index){
return _.rest(list,index).concat(_.first(list,index));
}});
var result = _.reorder(array, 3)