从数据列表创建数组

时间:2017-05-03 09:59:21

标签: javascript jquery arrays

嗨第一次发布在这里,请原谅我可怜的英语。

我有一个数据列表如下

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]);

还有更好的方法吗?

4 个答案:

答案 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);