嗨第一次发布在这里,请原谅我可怜的英语。
我有一个数据列表如下
var list = '1,2,3,4,8,9,10,20,21,22,23,24'
我想将此列表转换为数组,类似这样的
var array = ([1,4],[8,10],[20,24]);
在跳转到另一个变量(8-10)之前,它将采用列表中的第一个和最后一个(1-4)元素。
我已经提出了一些代码,但它非常混乱
var first = true;
var firstvalue = '';
var b ='';
var endvalue ='';
var last = '';
var myArray = [];
$('.highlight').each(function() {//Loop in list
if(first){//Only For the first time to set up the loop
firstvalue = this.id;
b = firstvalue;
first = false;
return;
}
if(parseInt(this.id)-1 != b){//When gap happen and new array is insert
endvalue = b;
/*save here*/
myArray.push([firstvalue,endvalue]);
firstvalue = this.id;
b = firstvalue;
}else{
b = this.id;
}
last = this.id;//Last Item that cant capture
});
myArray.push([firstvalue,last]);
还有更好的方法吗?
答案 0 :(得分:0)
你可以这样做
var result=[];
var list = '1,2,3,4,8,9,10,20,21,22,23,24'
var dataOflist=list.split(',');
var l=dataOflist.splice(dataOflist.length-4,4);
var f=dataOflist.splice(0,4);
result[0]=f;
result[1]=dataOflist;
result[2]=l;
console.log(result);
希望这个帮助
答案 1 :(得分:0)
您可以拆分字符串并将所有值转换为数字。然后对生成的数组使用Array#reduce
并检查前驱和实际值。
如果使用递增的预先成员不相等,则将具有实际值的新数组连接到结果集。
否则更新结果集中最后一个数组的索引1
的值。
适用于任何范围尺寸。
var list = '1,2,3,4,8,9,10,20,21,22,23,24',
result = list.split(',').map(Number).reduce(function (r, a, i, aa) {
if (aa[i - 1] + 1 !== a) {
return r.concat([[a]]);
}
r[r.length - 1][1] = a;
return r;
}, []);
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)
试试:
var list = '1,2,3,4,8,9,10,20,21,22,23,24,26,27,28,30';
list = list.split(',').map(x => parseInt(x));
list.push(Infinity);
console.log(JSON.stringify(list));
var startIndex = 0;
var result = list.reduce((a, b, i, arr) => {
if(i != 0 && b - 1 != arr[i-1])
{
a.push([arr[startIndex], arr[i-1]]);
startIndex = i;
}
return a;
}, []);
console.log(JSON.stringify(result));

答案 3 :(得分:0)
试试这个:方便简单的方法。
var list = '1,2,3,4,8,9,10,20,21,22,23,24';
list = list.split(',');
var arrayList = [];
var firstEle = 0, lastEle = 0;
list[-1] = -2;
for(var i=-1; i<list.length; i++)
{
if(i == 0)
firstEle = list[0];
if(((list[i+1] - list[i]) > 1) && i >= 0 && i <= (list.length - 1))
{
lastEle = list[i];
arrayList.push('['+firstEle+','+lastEle+']');
firstEle = list[i+1];
}
else if(i == (list.length - 1))
{
lastEle = list[i];
arrayList.push('['+firstEle+','+lastEle+']');
}
}
alert(arrayList);