Javascript 如何按数值对2个单独的数组进行排序?
我有两个javascript数组变量,如下所示Javascript 如何按数值对2个单独的数组进行排序?,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有两个javascript数组变量,如下所示 var distance = [10, 5, 2, 11, 12]; var places = ['A', 'B', 'C', 'D', 'E']; 我想做的是,我想对距离数组进行排序,这样数字应该按升序排列,并以此为基础,位置也应该按升序排列。因此,输出数组应该如下所示 var distance = [2, 5, 10, 11, 12]; var places = ['C', 'B', 'A', 'D', 'E']; 我尝试使用下面的代码对距
var distance = [10, 5, 2, 11, 12];
var places = ['A', 'B', 'C', 'D', 'E'];
我想做的是,我想对距离数组进行排序,这样数字应该按升序排列,并以此为基础,位置也应该按升序排列。因此,输出数组应该如下所示
var distance = [2, 5, 10, 11, 12];
var places = ['C', 'B', 'A', 'D', 'E'];
我尝试使用下面的代码对距离数组进行排序,但我不知道应该使用什么逻辑将更改后的索引应用到位置数组
distance.sort(function(a,b){return a - b});
您可能想做的是将
位置
和距离
组合到一个对象中,这样您就可以拥有一个对象数组。然后,您可以对单个数组进行排序,所有place
和distance
值将在排序后的数组中保持关联
var data = [
{distance: 10, place: 'A'},
{distance: 5, place: 'B'},
{distance: 2, place: 'C'},
{distance: 11, place: 'D'},
{distance: 12, place: 'E'}
];
data.sort(function(a, b) {
return a.distance - b.distance;
});
// result would be:
[
{distance: 2, place: 'C'},
{distance: 5, place: 'B'},
{distance: 10, place: 'A'},
{distance: 11, place: 'D'},
{distance: 12, place: 'E'}
];
仅供参考,这种类型的存储结构对于从列表中添加或删除项目也很有用,因为您只需从阵列中添加或删除单个对象,而不是对两个阵列进行双重维护。想象一下,除了距离之外,你还有其他几个地方。这个对象数组结构的可伸缩性和维护简单得多。试试这个
或者你可以试试这个
var distance = [10, 5, 2, 11, 12];
var places = ['A', 'B', 'C', 'D', 'E'];
var newArray = [];
distance.forEach(function(v, index){
newArray.push({key: v, value: places[index]})
});
newArray.sort(function(a, b){
return a.key - b.key;
});
distance = [];
places = [];
newArray.forEach(function(v){
distance.push(v.key);
places.push(v.value);
});
console.log(distance);
console.log(places);
var distance = [10, 5, 2, 11, 12];
var places = ['A', 'B', 'C', 'D', 'E'];
var newArray = [];
distance.forEach(function(v, index){
newArray.push({key: v, value: places[index]})
});
newArray.sort(function(a, b){
return a.key - b.key;
});
distance = [];
places = [];
newArray.forEach(function(v){
distance.push(v.key);
places.push(v.value);
});
console.log(distance);
console.log(places);