基于来自不同长度的另一个数组的值对数组进行排序

时间:2014-09-16 01:40:32

标签: javascript arrays sorting

我查看过几篇与问题类似的帖子,但我找不到解决问题的帖子。其他人似乎都在使用相同大小或值的另一个数组进行排序。

我有两个看起来像这样的数组:

var allCategories = ['Campus', 'Building', 'Floor', 'Room', 'Lecture Theatre', 'Lab'];
var currentCategories = ['Room', 'Lab', 'Campus'];

如何对currentCategories进行排序,以使订单与allCategories的订单相匹配?

期望的输出:

currentCategories --> ['Campus', 'Room', 'Lab'];

3 个答案:

答案 0 :(得分:4)

"按照该数组"中的元素索引对此数组进行排序:

currentCategories.sort(function(a, b) {
  return allCategories.indexOf(a) - allCategories.indexOf(b);
});
// => ["Campus", "Room", "Lab"]

答案 1 :(得分:3)

如果您想要的只是allCategories订单 currentCategories成员,则可以执行以下操作。

allCategories.filter(function(x){return currentCategories.indexOf(x) != -1})

这假设您将每个array视为一组非重复元素。正如评论中所提到的,此方法可能从最终值中删除重复元素,或者不按照您想要的方式对重复元素进行排序。

答案 2 :(得分:0)

Array.Sort方法可以提供自定义功能。你可以这样做:

currentCategories.sort(function(a, b) {
    var i = allCategories.indexOf(a),
        j = allCategories.indexOf(b);           
    return i - j;
});

我没有检查currentCategories中的值不在allCategories时的行为。但是,如果是这样的话,就不会辜负它的名字。

如果这是一种常见情况,您可以按照以下几行进行概括:

function sortByList(list) {
    return function (a, b) { return list.indexOf(a) - list.indexOf(b); };
}

如此称呼它:

currentCategories.sort(sortByList(allCategories));