Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
142
rated 0 times [  148] [ 6]  / answers: 1 / hits: 26041  / 9 Years ago, sat, february 7, 2015, 12:00:00

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]


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.


More From » sorting

 Answers
6

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




[#67916] Thursday, February 5, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
domeniccolti

Total Points: 276
Total Questions: 98
Total Answers: 93

Location: India
Member since Fri, May 13, 2022
2 Years ago
domeniccolti questions
Mon, Oct 18, 21, 00:00, 3 Years ago
Thu, Oct 14, 21, 00:00, 3 Years ago
Thu, Jul 15, 21, 00:00, 3 Years ago
Sat, Oct 24, 20, 00:00, 4 Years ago
Thu, Sep 3, 20, 00:00, 4 Years ago
;