在Javascript中按行数据排序数组
例如,我有一个数组:在Javascript中按行数据排序数组,javascript,arrays,sorting,Javascript,Arrays,Sorting,例如,我有一个数组: [[1,2,3,4,5,6], ["Red", "Blue", "Green", "Yellow", "Black", "Sliver"], [25, 50, 10, 0, 5, 100]] 如何将这些数据按第3行的升序排序 比如说 [[4,5,3,1,2,6], ["Yellow", "Black", "Green", "Red", "Blue", "Sliver"], [0, 5, 10, 25, 50, 100]] 您可以首先对要排序的最后一个数组表单数据进行排序
[[1,2,3,4,5,6],
["Red", "Blue", "Green", "Yellow", "Black", "Sliver"],
[25, 50, 10, 0, 5, 100]]
如何将这些数据按第3行的升序排序
比如说
[[4,5,3,1,2,6],
["Yellow", "Black", "Green", "Red", "Blue", "Sliver"],
[0, 5, 10, 25, 50, 100]]
您可以首先对要排序的最后一个数组表单数据进行排序,并将其放入对象中,然后按该对象排序
var-arr=[
[1, 2, 3, 4, 5, 6],
[“红色”、“蓝色”、“绿色”、“黄色”、“黑色”、“银色”],
[25, 50, 10, 0, 5, 100]
]
var sortBy=arr[2].slice().sort((a,b)=>a-b).reduce(函数(r,e,i){
r[i]=arr[2].indexOf(e)
返回r;
}, {})
arr.forEach(函数(e,i){
arr[i]=e.slice().sort(函数(a,b){
返回排序为[e.indexOf(a)]-排序为[e.indexOf(b)]
})
})
console.log(JSON.stringify(arr))
var myArray=[
[1, 2, 3, 4, 5, 6],
[“红色”、“蓝色”、“绿色”、“黄色”、“黑色”、“银色”],
[25, 50, 10, 0, 5, 100]
];
//将索引i和j的值交换给数组arr
功能交换(arr、i、j){
var-temp=arr[i];
arr[i]=arr[j];
arr[j]=温度;
}
//将被排序的数组您可以在这里选择任何人(这样更灵活)
var theaar=myArray[2];
//排序
for(变量i=0,len=theArr.length;itheArr[j])
//minIndex成为该索引(j)
minIndex=j;
}
//现在我们找到了minIndex,让我们为myArray的所有子数组交换minIndex值和i值
myArray.forEach(函数(subar){
掉期(Subar、minIndex、i);
});
}
log(myArray)代码>首先对最后一个数组进行排序以获得已排序的映射,然后使用此映射对相应的其他两个数组进行排序
修改@Nenad代码以获得预期的输出
let arr = [
[1, 2, 3, 4, 5, 6],
["Red", "Blue", "Green", "Yellow", "Black", "Sliver"],
[25, 50, 10, 0, 5, 100]
]
let sortBy = arr[2].slice().sort((a, b) => a - b).reduce((r, e, i) =>{
r[i] = arr[2].indexOf(e)
return r;
}, {})
let x = arr.map( (e) =>{
return( e.slice().sort( (a, b) =>{
return sortBy[e.indexOf(a)] - sortBy[e.indexOf(b)]
})
)
})
console.log(JSON.stringify(x))
许多语言中都有一个名为zip
的标准函数,它可以将行数组转换为列数组,例如,如果a
是
[
[1, 2, 3],
[4, 5, 6]
]
然后zip(a)
将是:
[ [1, 4], [2, 5], [3, 6] ]
JS没有内置的zip
,但编写起来很简单:
let zip = a => a[0].map((_, i) => a.map(r => r[i]));
使用zip
只需一行代码即可解决您的问题:
let result = zip(zip(data).sort((a, b) => a[2] - b[2]));
基本上,将行转换为列,按第3个元素排序,然后再转换回行。请说明您到目前为止所做的工作并参考。您可以解释第二个子数组是如何排序的吗?请提供一些有关zip
的链接吗。?这真的很有趣。@Hekmat:当然,是的,这是一个非常好的概念。将序列的元组映射成元组序列。谢谢。