admin管理员组文章数量:1416315
I have an array like
var arr = [12, 13, 14, 17, 18, 19, 20]
I was wondering how I could iterate through the array so that I can split this array into 2 arrays based on the sequences ? i.e. basically if i+1 != true
make it a new array
var arr = [12, 13, 14]
var arr2 = [17,18,19,20]
I am using lodash and have tried a number of for
statements using splice
but Im getting a bit confused ? Appreciate any help
I have an array like
var arr = [12, 13, 14, 17, 18, 19, 20]
I was wondering how I could iterate through the array so that I can split this array into 2 arrays based on the sequences ? i.e. basically if i+1 != true
make it a new array
var arr = [12, 13, 14]
var arr2 = [17,18,19,20]
I am using lodash and have tried a number of for
statements using splice
but Im getting a bit confused ? Appreciate any help
- 1 little more information please how you want to split - the split after 3 elements is pretty easy, is that all you need? – luk2302 Commented Jun 2, 2013 at 18:57
- 2 arrays with equals half? – iraycd Commented Jun 2, 2013 at 18:57
-
I need the split to recognize when the sequence has stopped ? i.e. 12, 13, 14 - then there is a break and the sequence doesnt start again until 17, 18, 19. i.e.
i+1 != true split to new array
? – Andy Commented Jun 2, 2013 at 18:58
4 Answers
Reset to default 3Example on jsFiddle
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
will contain all your arrays
Minified version
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]);
Here's a another, more dense approach, which uses underscore's quite convenient groupBy and values methods:
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; }) );
As a result, result
archive will contain all the sequences as elements. Here's the JSFiddle to play with.
Explanation: groupBy
groups the source array with help of the callback (which returns a new sequence number each time the difference between the currently processed element (el
) and the previous one (arr[i-1]
) is bigger than 1. It returns an object, though, so I have to put it through _.values
; you may or may not this step.
I wonder is that possible to request something like groupByInArray
function? Should be trivial to implement, but might be very useful in situations like this.
Do you mean like this?
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;
}
try this :)
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);
http://jsfiddle/zajnH/
本文标签: for loopSplit arrays based on sequences javascriptStack Overflow
版权声明:本文标题:for loop - Split arrays based on sequences javascript - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745243822a2649463.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论