Вы можете сделать это без lodash, используя функцию, где вы получаете ключи вашего пользовательского заказа, вы сортируете их по их значению и режиму (desc или asc), а затем уменьшаете их, фильтруя массив, который вы хотите упорядочить, добавляякаждый раз элементы.Надеюсь, это поможет.
const foo = [{
bar: {
order: "hello"
}
},{
bar: {
order: "something"
}
},{
bar: {
order: "else"
}
},{
bar: {
order: "else"
}
},{
bar: {
order: "anotherelse"
}
}];
const order = { "something": 1, "hello": 3, "else": 2, "missing": 4, "anotherelse": 2 };
const orderWith = (array, order, desc) =>
Object.keys(order)
.sort((a, b) => desc ? order[b] - order[a] : order[a] - order[b])
.reduce((acc, val) =>
acc.concat(array.filter(({ bar: { order }}) => val === order))
, []);
console.log('Descending order');
console.log(orderWith(foo, order));
console.log('Ascending order')
console.log(orderWith(foo, order, true));