Lodash sort collection based on external array Lodash sort collection based on external array arrays arrays

Lodash sort collection based on external array


var sortedCollection = _.sortBy(collection, function(item){  return firstArray.indexOf(item.guid)});


Here is just a simple add to the accepted answer in case you want to put the unmatched elements at the end of the sortedCollection and not at the beginning:

const last = collection.length;var sortedCollection = _.sortBy(collection, function(item) {  return firstArray.indexOf(item.guid) !== -1? firstArray.indexOf(item.guid) : last;});


Input:

var data1 = ['129asg', '39342aa'];var data2 = [{    guid: '39342aa',    name: 'John'}, {    guid: '129asg',    name: 'Mary'}];
  1. First create an index object, with _.reduce, like this

    var indexObject = _.reduce(data2, function(result, currentObject) {    result[currentObject.guid] = currentObject;    return result;}, {});
  2. And then map the items of the first array with the objects from the indexObject, like this

    console.log(_.map(data1, function(currentGUID) {    return indexObject[currentGUID]}));

Output

[ { guid: '129asg', name: 'Mary' },  { guid: '39342aa', name: 'John' } ]

Note: This method will be very efficient if you want to sort so many objects, because it will reduce the linear look-up in the second array which would make the entire logic run in O(M * N) time complexity.