Javascript 如何在多维数组中对多列数据进行排序?
我正在使用Javascript 如何在多维数组中对多列数据进行排序?,javascript,arrays,columnsorting,Javascript,Arrays,Columnsorting,我正在使用Javascript代码,其中我有如下数组: 数组: [ ["2015-08-09", 1.2, 1.20, 2.1], ["2015-08-10", 1.2, 1.21, 2.11], ["2015-08-11", 1.2, 0.99, 2.20], ["2015-10-29", 1.2, 1.12, 2.22], ["2015-09-10", 1.21, 1.19, 2.00] ] [ ["2015-08-09", 1.20, 1.
Javascript
代码,其中我有如下数组:
数组:
[
["2015-08-09", 1.2, 1.20, 2.1],
["2015-08-10", 1.2, 1.21, 2.11],
["2015-08-11", 1.2, 0.99, 2.20],
["2015-10-29", 1.2, 1.12, 2.22],
["2015-09-10", 1.21, 1.19, 2.00]
]
[
["2015-08-09", 1.20, 1.20, 2.10],
["2015-08-10", 1.20, 1.21, 2.11],
["2015-08-11", 1.20, 0.99, 2.20],
["2015-10-29", 1.20, 1.12, 2.22],
["2015-09-10", 1.21, 1.19, 2.00]
]
我要求的结果是:
[
["2015-08-09", 1.2, 1.20, 2.1],
["2015-08-10", 1.2, 1.21, 2.11],
["2015-08-11", 1.2, 0.99, 2.20],
["2015-10-29", 1.2, 1.12, 2.22],
["2015-09-10", 1.21, 1.19, 2.00]
]
[
["2015-08-09", 1.20, 1.20, 2.10],
["2015-08-10", 1.20, 1.21, 2.11],
["2015-08-11", 1.20, 0.99, 2.20],
["2015-10-29", 1.20, 1.12, 2.22],
["2015-09-10", 1.21, 1.19, 2.00]
]
由于数组是三维的,我想在列1
和2
上排序,所以首先在1
列上应用升序,然后在2列上应用升序/降序
提前感谢。实际上,您的阵列是二维的。您可以按照与一维数组相同的方式对其进行排序:
const数据=[
[ "2015-08-09", 1.2, 1.2],
[ "2015-08-10", 1.2, 1.21],
[ "2015-08-11", 1.2, 0.99],
[ "2015-10-29", 1.2, 1.12] ,
[ "2015-09-10", 1.21, 1.19]
]
函数排序(a,b){
const col1=新日期(a[0])-新日期(b[0]);
if(col1==0){
返回a[1]-b[1];
}
返回col1;
}
console.log(data.sort(sort))
实际上,您的数组是二维的。您可以按照与一维数组相同的方式对其进行排序:
const数据=[
[ "2015-08-09", 1.2, 1.2],
[ "2015-08-10", 1.2, 1.21],
[ "2015-08-11", 1.2, 0.99],
[ "2015-10-29", 1.2, 1.12] ,
[ "2015-09-10", 1.21, 1.19]
]
函数排序(a,b){
const col1=新日期(a[0])-新日期(b[0]);
if(col1==0){
返回a[1]-b[1];
}
返回col1;
}
console.log(data.sort(sort))
只需通过获取每列的增量来链接想要的顺序
var数组=[[“2015-08-09”,1.2,1.2],“2015-08-10”,1.2,1.21],“2015-08-11”,1.2,0.99],“2015-10-29”,1.2,1.12],“2015-09-10”,1.21,1.19];
sort((a,b)=>a[1]-b[1]| | a[2]-b[2]);
log(array.map(a=>a.join(“”))代码>只需通过获取每列的增量来链接想要的订单
var数组=[[“2015-08-09”,1.2,1.2],“2015-08-10”,1.2,1.21],“2015-08-11”,1.2,0.99],“2015-10-29”,1.2,1.12],“2015-09-10”,1.21,1.19];
sort((a,b)=>a[1]-b[1]| | a[2]-b[2]);
log(array.map(a=>a.join(“”))代码>这里有另一种方法,在排序比较函数上使用更类似的数学表达式,并按照您的预期格式化输出:
const输入=[
["2015-08-09", 1.2, 1.20, 2.1],
["2015-08-10", 1.2, 1.21, 2.11],
["2015-08-11", 1.2, 0.99, 2.20],
["2015-10-29", 1.2, 1.12, 2.22],
["2015-09-10", 1.21, 1.19, 2.00]
];
//首先,我们使用map()克隆数组,这样就不会更改
//原始数据,也可以按照您的期望格式化数字。
设res=input.map(
([a,b,c,d])=>[a,b.toFixed(2),c.toFixed(2),d.toFixed(2)]
);
//现在,我们使用更类似于数学表达式的方法对新数组进行排序。
res.sort((x,y)=>
{
设n=x[1]-y[1],m=x[2]-y[2];
返回n+m*(n==0);
});
控制台日志(res)代码>这里有另一种方法,在排序比较函数上使用更类似的数学表达式,并按照您的预期格式化输出:
const输入=[
["2015-08-09", 1.2, 1.20, 2.1],
["2015-08-10", 1.2, 1.21, 2.11],
["2015-08-11", 1.2, 0.99, 2.20],
["2015-10-29", 1.2, 1.12, 2.22],
["2015-09-10", 1.21, 1.19, 2.00]
];
//首先,我们使用map()克隆数组,这样就不会更改
//原始数据,也可以按照您的期望格式化数字。
设res=input.map(
([a,b,c,d])=>[a,b.toFixed(2),c.toFixed(2),d.toFixed(2)]
);
//现在,我们使用更类似于数学表达式的方法对新数组进行排序。
res.sort((x,y)=>
{
设n=x[1]-y[1],m=x[2]-y[2];
返回n+m*(n==0);
});
控制台日志(res)代码>我也面临同样的问题,并找到了一个在多维数组中对多列数据进行排序的好解决方案
检查下面的代码
(函数(){
函数deepsort(){
变量i,order=参数,L=order.length,tem;
返回a.sort(函数(a,b){
i=0;
而(ibo?1:-1;
}
如果(res[1]=“DESC”){
返回ao })();代码>我也面临同样的问题,并找到了一个在多维数组中对多列数据进行排序的好解决方案
检查下面的代码
(函数(){
函数deepsort(){
变量i,order=参数,L=order.length,tem;
返回a.sort(函数(a,b){
i=0;
而(ibo?1:-1;
}
如果(res[1]=“DESC”){
返回ao })();代码>不是二维的吗?只是说‘不,它不仅仅是二维数组,它的动态数组?关于数组是动态的……如果你不给我们更多关于动态意味着什么的信息,也许还有一个例子,我们就帮不了你。在你更新了原始问题之后