我有一个数组:
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
我需要找到一个具有算术级数的序列,并与其他值分开。 有什么想法吗?
答案 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]);
}
不确定数组语法(可能会混淆语言)是正确的,还是我完全理解你的问题。