Sort an array in the same order of another array

前端 未结 4 1105
长发绾君心
长发绾君心 2020-12-06 07:19

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

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

4条回答
  •  眼角桃花
    2020-12-06 07:47

    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); // ["corbin", "dan", "steven", "bob"]

    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);

提交回复
热议问题