[英]Javascript Sync 2 or more array in a sort function
我有2个或更多数组
var Arr1 = [1,1,3,2];
var Arr2 = [a,b,c,d];
这个想法是对第一个数组进行排序,也就是对主数组进行排序,我想在第二个数组上反映新的排序,所以结果应该是
var Arr1 = [1,1,2,3];
var Arr2 = [a,b,d,c];
有命令以“快速”方式执行此操作吗?
压缩,整理,解压缩。 用非常简单的Javascript:
var zip = [];
for (var i = 0; i < Arr1.length; i++) {
zip.push([Arr1[i], Arr2[i]]);
}
zip.sort(function (a, b) { return a[0] - b[0]; });
for (var i = 0; i < zip.length; i++) {
Arr1[i] = zip[i][0];
Arr2[i] = zip[i][1];
}
您可以将索引用作临时数组,并使用arr1
的值对其进行排序。 然后将结果映射到arr2
。
var arr1 = [1, 1, 3, 2], arr2 = ['a', 'b', 'c', 'd'], indices = arr1.map(function (_, i) { return i; }); indices.sort(function (a, b) { return arr1[a] - arr1[b]; }); arr2 = indices.map(function (a) { return arr2[a]; }); console.log(arr2);
ES6
var arr1 = [1, 1, 3, 2], arr2 = ['a', 'b', 'c', 'd']; arr2 = arr1 .map((_, i) => i) .sort((a, b) => arr1[a] - arr1[b]) .map(a => arr2[a]); console.log(arr2);
如果使用下划线,则可以尝试以下方法:
var sorted =_.map(new Array(4), function(i){
return {
a:Arra1[i],
b:Arr2[i]
}
}).sort(function(item){return item.a; })
或js
var sorted = new Array(4).map(function(item,index){
return {
a:Arra1[i],
b:Arr2[i]
}
};
sorted.sort(function(p,b){ return p.a-b.a;})
Arr1 = sorted.map(function(item){return item.a});
Arr2 = sorted.map(function(item){return item.b});
假设两个数组分别为Arr1,Arr2,并且它们的长度相同:
1)合并两个数组:
var combined = [];
for (var i = 0; i < Arr1.length; i++) {
combined.push({'arr1': Arr1[i], 'arr2': Arr2[i]});
}
2)排序:
combined.sort(function(a, b) {
return a.arr1 < b.arr1; //ascending based on arr1
});
3)分开:
for (var i = 0; i < combined.length; i++) {
Arr1[i] = combined[i].arr1;
Arr2[i] = combined[i].arr2;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.