在排序函数中同步2个或更多的数组
Javascript Sync 2 or more array in a sort function
我有两个或两个以上的数组
var Arr1 = [1,1,3,2];
var Arr2 = [a,b,c,d];
我们的想法是对第一个数组进行排序,它是主数组,我想在第二个数组上反映新的排序,所以结果将是
var Arr1 = [1,1,2,3];
var Arr2 = [a,b,d,c];
有什么命令可以"快速"地做到这一点吗?
Zip 'em, sort 'em, unzip。
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;
}
相关文章:
- 如何使用 node.js 比较两个 json 数组
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- MongoDB (php) - 以数组而不是多个属性的形式返回文档属性
- 在数组中的一个元素上设置多个值
- 访问$.ajax()函数中的两个不同数组
- 在对象数组中查找多个值的d3范围
- 正在更新mongod中两个对象内部的数组
- 如何循环通过2个对象数组并通过匹配id进行合并
- 如何使用javascript合并两个对象数组
- 使用filter和map方法将数组中某些元素的第一个字母大写-JavaScript
- 第一个字第一个字符第二个字第二个字符,一直到数组结束
- 在数组JS中查找三个重复项
- 如何获取数组第一个元素的范围
- JSON数组-多个有效答案的可能性
- 编写一个函数,将数组(第一个参数)拆分为大小(第二个参数)的长度组,并将它们作为多维数组返回
- 使用.shift()更新数组'5个元素
- JavaScript 过滤器数组多个条件
- 如果数组第一个元素中的字符串包含数组第二个元素中字符串的所有字母,则返回true
- Javascript序列化数组多个表单问题
- 编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回