我有一个像
var arr = [12, 13, 14, 17, 18, 19, 20]
我想知道如何遍历数组,以便可以根据序列将此数组拆分为 2 个数组?即基本上如果i+1 != true
使它成为一个新数组
var arr = [12, 13, 14]
var arr2 = [17,18,19,20]
我正在使用 lodash 并尝试了许多for
语句,splice
但我有点困惑?感谢任何帮助
我有一个像
var arr = [12, 13, 14, 17, 18, 19, 20]
我想知道如何遍历数组,以便可以根据序列将此数组拆分为 2 个数组?即基本上如果i+1 != true
使它成为一个新数组
var arr = [12, 13, 14]
var arr2 = [17,18,19,20]
我正在使用 lodash 并尝试了许多for
语句,splice
但我有点困惑?感谢任何帮助
var a = [1, 2, 3, 5, 6, 7];
var r = [];
var t = [];
for (var i = 0; i < a.length; ++i)
{
if (i == 0)
{
t.push(a[i]); // add the first element and continue
continue;
}
if (a[i - 1] != (a[i] - 1))
{
// if the current is not sequential
// add the current temporary array to arrays result
r.push(t);
// clear the temporary array and start over
t = [];
}
t.push(a[i]);
}
r.push(t);
r
将包含你所有的数组
function seq(e,t,n,r){t=[];n=[];for(r=0;r<e.length;++r){if(!r){n.push(e[r]);continue}if(e[r-1]!=e[r]-1){t.push(n);n=[]}n.push(e[r])}t.push(n);return t}
var result = seq([1, 2, 3, 5, 6, 7]);
这是另一种更密集的方法,它使用下划线非常方便的groupBy和values方法:
var origin = [12,13,14,15,17,18,19,21,22,23];
var c = 0, result = _.values( _.groupBy(origin, function(el, i, arr) {
return i ? c+= (1 !== el - arr[i-1]) : 0; }) );
结果,result
存档将包含所有序列作为元素。这是要玩的JSFiddle 。
说明:groupBy
在回调的帮助下对源数组进行分组(每次当前处理的元素(el
)与前一个元素( )之间的差异arr[i-1]
大于 1 时,它都会返回一个新的序列号。不过,它返回一个对象,所以我有把它通过_.values
;你可能会也可能不会这一步。
我想知道是否可以请求类似groupByInArray
功能的东西?实现起来应该很简单,但在这种情况下可能非常有用。
你的意思是这样吗?
function split(arr) {
var res = [];
var subres = [];
for (var i = 0; i < arr.length; i++) {
var length = subres.length;
if (length === 0 || subres[length - 1] === arr[i] - 1) {
subres.push(arr[i]);
} else {
res.push(subres);
subres = [arr[i]];
}
}
res.push(subres);
return res;
}
试试这个 :)
var array = [12,13,14,4567,789,0]; //e.g.
var index;
var previous = array[0];
for (var index = 1; index++; index < array.length) {
if (previous + 1 == array[index]) {
previous = array[index]; //++
} else {
break;
}
}
var firstPart = array.slice(0, index + 1);
var secondPart = array.slice(index + 1);