我有一个来自 mij 页面上的查询的(JS)数组,它看起来像这样:
12349,1,1,1,12345,2,2,2,123457,3,3,3
5 位数字是示例“时间戳”,一位是属于时间戳的价格。我想根据时间戳对数组进行排序,但也希望价格保持在时间戳之后。所以在排序之后,数组必须看起来像这样:
12345,2,2,2,12349,1,1,1,123457,3,3,3
这个怎么做?
我有一个来自 mij 页面上的查询的(JS)数组,它看起来像这样:
12349,1,1,1,12345,2,2,2,123457,3,3,3
5 位数字是示例“时间戳”,一位是属于时间戳的价格。我想根据时间戳对数组进行排序,但也希望价格保持在时间戳之后。所以在排序之后,数组必须看起来像这样:
12345,2,2,2,12349,1,1,1,123457,3,3,3
这个怎么做?
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])
}
}
这是处理它的一种方法:
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());
我没有假设每个时间戳有多少价格。我还假设您的 6 位数字也应该是时间戳。
我没有再次将您的数组展平,但是您可以根据需要这样做,但是将数据保持在更有用的结构中更有意义。
将数据存储在这样的数组中确实是错误的,您可能应该使用多维数组:
[0]=>{[0]12345,[1]1}
[1]=>{[0]23456,[1]2}
甚至更好的关联数组:
[0]=>{['timestamp']12345,['price']1}
[1]=>{['timestamp']23456,['price']2}
我希望它可以帮助你。
编辑:这不是代码,我只是试图显示数组的结构。