Javascript如何对部分javascript数组进行排序?

时间:2013-01-09 19:46:48

标签: javascript

我有一个来自mij页面查询的(JS)数组,它看起来像这样:

12349,1,1,1,12345,2,2,2,123457,3,3,3

5位数字是示例“timestamps”,一位数是属于时间戳的价格。我想根据时间戳对数组进行排序,但也希望价格保持在时间戳之后。因此,在进行测试后,阵列必须如下所示:

12345,2,2,2,12349,1,1,1,123457,3,3,3

怎么做?

3 个答案:

答案 0 :(得分:5)

var input=[12349,1,1,1,12345,2,2,2,123457,3,3,3]

第一步:转换为稍微好一点的结构(我不知道语义,但你知道)。这个步骤通常不是必需的:

var temp=[];
for(int i=0; i<input.length; i+=4){ //assuming the form T,x,x,x{,T,x,x,x}
  temp.push(input.slice(i,i+3))
}

第二步:进行排序。如果您使用正确的数据结构,那么这是您唯一需要做的事情(除非您使用return a.timestamp-b.timestamp):

temp.sort(function(a,b){return a[0]-b[0]})

第三步(可选):转换回来:

var out=[];
for(int i=0; i<temp.length; i++){
  for(int j=0; j<temp[i].length; j++){
    out.push(temp[i][j])
  }
}

答案 1 :(得分:0)

这是处理它的一种方法:

var source = [12345,2,2,2,12349,1,1,1,123457,3,3,3];

function sort() {
    var timeslices = [];
    var curr;
    for (var i=0; i < source.length; i++) {
        if (source[i] > 9999) {
            if (curr) {
                timeslices.push(curr);
            }
            curr = {
                time : source[i],
                prices: []
            };
        }
        else {
            curr.prices.push(source[i]);
        }
    }
    timeslices.push(curr);
    return timeslices.sort(function(a,b) {
        return a.time - b.time;
    });
}

console.dir(sort());

Fiddle

我没有假设每个时间戳与多少价格相关联。我还假设您的6位数字也应该是时间戳。

我没有再将你的阵列展开,但如果你愿意,你可以这样做,但将数据保持在一个更有用的结构更有意义。

答案 2 :(得分:-1)

将数据存储在这样的数组中是非常错误的,您应该使用多维数组:

[0]=>{[0]12345,[1]1}
[1]=>{[0]23456,[1]2}

甚至更好的关联数组:

[0]=>{['timestamp']12345,['price']1}
[1]=>{['timestamp']23456,['price']2}

我希望它可以帮到你。

编辑:这不是代码,我只是试图展示数组的结构。