Я пытаюсь найти элегантный способ в ES6 сортировать массив объектов на основе указанных значений.Вот сценарий:
const list = [
{
"name": "john",
"lastName": "smith"
}, {
"name": "tony",
"lastName": "smith"
}, {
"name": "tony",
"lastName": "grey"
}, {
"name": "mary",
"lastName": "smith"
}, {
"name": "john",
"lastName": "x"
}, {
"name": "tom",
"lastName": "y"
}
, {
"name": "mary",
"lastName": "x"
}
]
let orderList = [{"name":["john","mary"]}, {"lastName":["x"]}];
Итак, в основном сортируем результат по именам (Джон, Мэри), а затем сортируем результат по lastName (x), но сортировка имен по-прежнему имеет приоритет.Результат должен выглядеть следующим образом:
[
{
"name": "john",
"lastName": "x"
}, {
"name": "john",
"lastName": "smith"
}, {
"name": "mary",
"lastName": "x"
}, {
"name": "mary",
"lastName": "smith"
}, {
"name": "tony",
"lastName": "smith"
}, {
"name": "tony",
"lastName": "grey"
}, {
"name": "tom",
"lastName": "y"
}
]
Я уже пытался что-то сделать с группой по, но это ручной процесс для каждого имени и фамилии.
_.groupBy(list , {"name": "john"});
Я также пытался поэкспериментировать с уменьшением массива, но не могу найти хорошее динамическое решение.
const sortArr = ['john', 'mary'];
const sortedList= list.reduce((result, element) => {
let index = sortArr.findIndex(x => x === element.name);
result[index !== -1
? index
: result.length - 1].push(element);
return result;
},[ [], [], [] ]);
Любая помощь приветствуется.Спасибо