Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找出数组在javascript中是否包含算术级数_Javascript_Arrays - Fatal编程技术网

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

找出数组在javascript中是否包含算术级数,javascript,arrays,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 我需要找到一个算术级数序列,并与其他值分离。 有什么想法吗?以下内容似乎可行,但显示的输出与您预期的略有不同。 在你的例子中,我认为7和9应该分组(两个项目的任何序列都是一个算术 毕竟是进步)。或者,如果它们未分组,则12不应

我有一个数组:

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
我需要找到一个算术级数序列,并与其他值分离。
有什么想法吗?

以下内容似乎可行,但显示的输出与您预期的略有不同。 在你的例子中,我认为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]);
功能拆分(arr){
如果(arr.length<2){
返回;
}
var delta=未定义;
var start=0;
对于(var idx=1;idx
以下内容似乎有效,但显示的输出与您预期的略有不同。 在你的例子中,我认为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]);
功能拆分(arr){
如果(arr.length<2){
返回;
}
var delta=未定义;
var start=0;
对于(var idx=1;idx
查看此解决方案

    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;
}

看看这个解决方案

    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;
}
arrays=Array();
var c=0;
数组[c][]=myarray[0]);
对于(var i=1;i
arrays=Array();
var c=0;
数组[c][]=myarray[0]);

对于(var i=1;我的意思是
var array_3=9
?如果前面的值不是这个值加上一,那么???:)我不相信有一个独特的解决方案,正如你所说的那样。您还可以使用类似于
1,4,7
的内容,并将其余内容设为单个组/2个组。或
1,2,3
4,9,14
,然后是7/9/12/13全部singles@versim是的,对不起,您的意思是
var array_3=9
?如果之前的值不是此值加1,那么??:)我不相信有一个独特的解决方案,正如你所说的。您还可以使用类似于
1,4,7
的内容,并将其余内容设为单个组/2个组。或
1,2,3
4,9,14
,然后是7/9/12/13全部singles@versim是的,抱歉,这个数组看起来很有希望,但不适用于此数组:[1,2,4,6,7,8,9,11,12]正如其他人所说,我认为您对问题的定义不够完整。我的算法返回:[1,2],[4,6],[7,8,9],[11,12],其中每个数组实际上都是一个算术级数,并且可能是最长的。阅读接受的解决方案,您似乎期望一个算术级数,其中增量为1。这不是生成数学解的方法。当增量与1不同时,我的解决方案有效(例如,上面的第二个数组是2的算术级数,如4,6,8,10。你是对的,对不起,我没有充分解释我的问题。英语不是我的第一语言看起来很有希望,但不适用于此数组:[1,2,4,6,7,8,9,11,12]正如其他人所说,我认为您对问题的定义不够完整。我的算法返回:[1,2],[4,6],[7,8,9],[11,12],其中每个数组实际上都是算术级数,并且是最长的。读取接受的解决方案时,您似乎希望算术级数的增量为1。这不是生成数学解。当增量可能不同于1时,我的解决方案有效(例如,上面的第二个数组是2的算术级数,如4,6,8,10。你是对的,对不起,我没有充分解释我的问题。英语不是我的第一语言