我想要序列中的元素(1,2,3)(6,7)(10,11)(15,16,17)。分别

时间:2013-04-05 13:56:43

标签: javascript jquery

我有以下数组:arrtooth

var arrtooth = tooth.split('|');

获得价值

arrtooth=[1,2,3,6,7,10,11,15,16,17];

我想要序列为(1,2,3) (6,7) (10,11) (15,16,17)的元素。 我的代码在Jquery中。我只想要实际的逻辑。

如果我在一个数组中得到3 2 2 3的输出就可以了,或者如果你有任何可以详细说明顺序的东西(输出)就可以了。

3 个答案:

答案 0 :(得分:2)

var arrtooth = [1, 2, 3, 6, 7, 10, 11, 15, 16, 17];
var last = arrtooth[0];
var result = [];
count = 1;
for (var i = 1; i < arrtooth.length; i++) {
    if (arrtooth[i] == (last + 1)) {
        count++;

    } else {
        result.push(count);
        count = 1;
    }
    last = arrtooth[i];
}
result.push(count);

<强> jsFiddle example

答案 1 :(得分:0)

var arrtooth=[1,2,3,6,7,10,11,15,16,17];

var a = arrtooth.reduce(function(result, cur,index, array){
     if( index == 0 || array[index-1] + 1 !== cur ){
        result.push(0);
     }
     result[ result.length-1 ]++;
     return result;
},[]);

console.log(a);   //[3,2,2,3];

DEMO

答案 2 :(得分:0)

假设数组包含以其他方式排序的整数,以下两个函数将为您提供您所追求的连续子集。第一个产生一个字符串输出,第二个产生一个二维数组。

var arrtooth = [1, 2, 3, 6, 7, 10, 11, 15, 16, 17];

function stringOutput(arrtooth) {
    var outputString = '(';
    for (var i = 0; i < arrtooth.length; i++) {
        if (i === 0) outputString += arrtooth[i];
        else if (arrtooth[i] - 1 == arrtooth[i - 1]) outputString += ',' + arrtooth[i];
        else outputString += ') (' + arrtooth[i];
    }
    outputString += ')';
    return outputString;
}

function arrayOutput(arrtooth) {
    var outputArray = [],
        toothArray = [];
    for (var i = 0; i < arrtooth.length; i++) {
        if (i === 0 || arrtooth[i] - 1 != arrtooth[i - 1]) {
            toothArray = [];
            outputArray.push(toothArray);
        }
        toothArray.push(arrtooth[i]);
    }
    return outputArray;
}

jsFiddle demo