按照与另一个数组相同的顺序对数组进行排序 [英] Sort an array in the same order of another array

查看:234
本文介绍了按照与另一个数组相同的顺序对数组进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有几个50多个这样的阵列。

I have a few arrays of 50+ names like this.

["dan", "ryan", "bob", "steven", "corbin"]
["bob", "dan", "steven", "corbin"]

我有另一个具有正确顺序的数组。请注意,上面的第二个数组不包含所有名称,但我仍然希望它遵循以下顺序:

I have another array that has the correct order. Note that the second array above does not include all of the names, but I still want it to follow the order of the following:

["ryan", "corbin", "dan", "steven", "bob"]

它没有逻辑顺序,它们只是按此顺序排列。对我来说有意义的是将每个数组与正确排序的数组进行比较。我想我看到有些人用PHP做这件事,但我找不到JavaScript解决方案。有谁知道怎么做?我已经尝试了几个小时而且我很难过。

There is no logical order to it, they are just in this order. What makes sense to me is to compare each array against the correctly ordered one. I think I saw some people doing this with PHP, but I was not able to find a JavaScript solution. Does anyone have any idea how to do this? I've been trying for a few hours and I'm stumped.

推荐答案

使用 indexOf() 获取参考数组中每个元素的位置,并在比较函数中使用它。

Use indexOf() to get the position of each element in the reference array, and use that in your comparison function.

var reference_array = ["ryan", "corbin", "dan", "steven", "bob"];
var array = ["bob", "dan", "steven", "corbin"];
array.sort(function(a, b) {
  return reference_array.indexOf(a) - reference_array.indexOf(b);
});
console.log(array);

每次搜索参考数组对大型数组来说都是低效的。如果这是一个问题,您可以将其转换为将名称映射到位置的对象:

Searching the reference array every time will be inefficient for large arrays. If this is a problem, you can convert it into an object that maps names to positions:

var reference_array = ["ryan", "corbin", "dan", "steven", "bob"];
reference_object = {};
for (var i = 0; i < reference_array.length; i++) {
    reference_object[reference_array[i]] = i;
}
var array = ["bob", "dan", "steven", "corbin"];
array.sort(function(a, b) {
  return reference_object[a] - reference_object[b];
});
console.log(array);

这篇关于按照与另一个数组相同的顺序对数组进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆