Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中按行数据排序数组_Javascript_Arrays_Sorting - Fatal编程技术网

在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:当然,是的,这是一个非常好的概念。将序列的元组映射成元组序列。谢谢。