找出数组在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;iarrays=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。你是对的,对不起,我没有充分解释我的问题。英语不是我的第一语言