找出数组是否包含javascript中的算术级数

时间:2014-07-24 14:23:00

标签: javascript arrays

我有一个数组:

var myarray = [1,2,3,4,7,9,12,13,14]

我需要像这样对值进行分组:

var array_1 = 1,2,3,4
var array_2 = 7
var array_3 = 8
var array_4 = 12,13,14

我需要找到一个具有算术级数的序列,并与其他值分开。 有什么想法吗?

3 个答案:

答案 0 :(得分:2)

以下似乎有效,但显示的输出与您期望的输出略有不同。 在你的例子中,我认为7和9应该被分组(两个项目的任何序列都是算术 毕竟进展)。或者如果它们没有分组,那么12不应该与13和13分组 14,或者12-9!= 13-12

function split(arr) {
       if (arr.length < 2) {
          return;
       }
       var delta = undefined;
       var start = 0;
       for (var idx = 1; idx < arr.length; idx++) {           
           if (delta === undefined) {
               delta = arr[idx] - arr[idx - 1];
           }
           if (arr[idx] - arr[idx - 1] != delta) {
             alert("subarray " + arr.slice(start, idx));
             start = idx;
             delta = undefined;
          }  
       }
       alert("subarray from" + arr.slice(start, arr.length));
    }

split([1,2,3,4,7,9,12,13,14]);

答案 1 :(得分:2)

查看此解决方案

    function explode(myarray) 
    {  
        var multi = []; 
        var i = j = 0;
        for ( key in myarray ) 
        {
            if((myarray[key-1]) != (myarray[key]-1))
            {
                i++;
                j=0;
            }
            if(j==0)
                multi[i] = [];
            multi[i][j] = myarray[key];
            j++;
        }
        return multi;
    }

它会返回一个多维数组,您可以在此示例中使用该数组

var myarray = [1,2,3,4,7,9,12,13,14];

var multi_array = explode(myarray);

var array_1 = multi_array[0];
var array_2 = multi_array[1];
var array_3 = multi_array[2];
var array_4 = multi_array[3];

新更新:

您还可以移除j索引并使用.push向阵列添加新元素

function explode(myarray) 
{  
    var multi = []; 
    var i = 0;
    for ( key in myarray ) 
    {
        if((myarray[key-1]) != (myarray[key]-1))
            i++;
        if(!multi[i])
            multi[i] = [];
        multi[i].push(myarray[key]);
    }
    return multi;
}

答案 2 :(得分:1)

arrays = Array();
var c = 0;
array[c][] = myarray[0]);
for (var i = 1; i<myarray.length; i++) {
    if (myarray[i-1] +1 != myarray[i])
        c++;
    array[c][] = push(myarray[i]);
}

不确定数组语法(可能会混淆语言)是正确的,还是我完全理解你的问题。