Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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,我有一个数组: distances = [[Obj1, Obj2, Obj3, Obj4], [15,221,9,2]]; 我想根据第二个数组对二维数组进行排序,因此它应该如下所示: distances = [[Obj4, Obj3, Obj1, Obj2], [2, 9, 15, 221]]; 我知道我可以使用这种方法:,但我似乎无法调整代码。 变量距离=[[Obj1,Obj2,Obj3,Obj4],[15221,9,2]; var newdistance=[]; 对于var i=0;i

我有一个数组:

distances = [[Obj1, Obj2, Obj3, Obj4], [15,221,9,2]];
我想根据第二个数组对二维数组进行排序,因此它应该如下所示:

distances = [[Obj4, Obj3, Obj1, Obj2], [2, 9, 15, 221]];
我知道我可以使用这种方法:,但我似乎无法调整代码。

变量距离=[[Obj1,Obj2,Obj3,Obj4],[15221,9,2]; var newdistance=[]; 对于var i=0;i<距离[0]。长度;我++ 新距离[i]={ Obj:距离[0][i], 关键词:距离[1][i] }; NewDistances.sortfunctionO1,O2{ 返回O1.KeyO2.Key-1:0; }; var结果=[],[]; 对于var i=0;i.长度;i++{ 结果[0][i]=newdistance[i]。Obj; 结果[1][i]=newdistance[i]。键; } console.logResult 变量距离=[[Obj1,Obj2,Obj3,Obj4],[15221,9,2]; var newdistance=[]; 对于var i=0;i<距离[0]。长度;我++ 新距离[i]={ Obj:距离[0][i], 关键词:距离[1][i] }; NewDistances.sortfunctionO1,O2{ 返回O1.KeyO2.Key-1:0; }; var结果=[],[]; 对于var i=0;i.长度;i++{ 结果[0][i]=newdistance[i]。Obj; 结果[1][i]=newdistance[i]。键; }
console.logResult 首先,一个相当低效的解决方案是将数组转换为与您在问题中链接的解决方案的布局相匹配

var temp = [];
for(var i in distances[0])
  temp[i] = ([distances[0][i], distances[1][i]]);
然后进行排序并将其转换回以前的形式:

distances = [[], []];
for (var i in temp) {
  distances[0][i] = temp[i][0];
  distances[1][i] = temp[i][1];
}

首先,一个相当低效的解决方案是将数组转换为与您在问题中链接的解决方案的布局相匹配

var temp = [];
for(var i in distances[0])
  temp[i] = ([distances[0][i], distances[1][i]]);
然后进行排序并将其转换回以前的形式:

distances = [[], []];
for (var i in temp) {
  distances[0][i] = temp[i][0];
  distances[1][i] = temp[i][1];
}

您可以为排序顺序使用临时数组,并将其应用于两个距离数组

变量距离=['Obj1'、'Obj2'、'Obj3'、'Obj4']、[15,221,9,2]], 顺序=距离[0].mapfunction 2;,i{return i;}; order.sort函数a,b{ 返回距离[1][a]-距离[1][b]; }; 距离[0]=order.mapfunction i{返回距离[0][i];}; 距离[1]=order.mapfunction i{返回距离[1][i];};
控制台。对数距离 您可以为排序顺序使用临时数组,并将其应用于两个距离数组

变量距离=['Obj1'、'Obj2'、'Obj3'、'Obj4']、[15,221,9,2]], 顺序=距离[0].mapfunction 2;,i{return i;}; order.sort函数a,b{ 返回距离[1][a]-距离[1][b]; }; 距离[0]=order.mapfunction i{返回距离[0][i];}; 距离[1]=order.mapfunction i{返回距离[1][i];};
控制台。对数距离;不是我,这是我要用的答案,谢谢!当然可以,谢谢!.map的也很好,我没有使用它,因为它在InternetExplorer6-8IE6-8中不兼容,甚至微软也放弃了它。不支持。。出于安全原因,最好避免。。如果真的需要,我个人会使用polyfill,而不是Perfect.:我自己使用jQuery来保持更高的兼容性。不幸的是,仍然有许多公司被IEF的低版本所束缚。不是我,这是我将使用的答案,谢谢!当然可以,谢谢!.map的也很好,我没有使用它,因为它在InternetExplorer6-8IE6-8中不兼容,甚至微软也放弃了它。不支持。。出于安全原因,最好避免。。如果真的需要,我个人会使用polyfill,而不是Perfect.:我自己使用jQuery来保持更高的兼容性。不幸的是,仍然有许多公司停留在IES的较低版本上。你应该更喜欢单个对象数组而不是多个数组。每个属性一个数组,你必须保持同步。距离=[{obj:Obj1,dist:15},{obj:Obj2,dist:221},{obj:Obj3,dist:9},{obj:Obj4,dist:2}]这更容易处理,并且可以避免同步问题。您应该更喜欢单个对象数组而不是多个数组,每个属性一个数组必须保持同步。距离=[{obj:Obj1,dist:15},{obj:Obj2,dist:221},{obj:Obj3,dist:9},{obj:Obj4,dist:2}]这更容易处理,并且可以避免同步问题。