Угловая сортировка массива как другого массива - PullRequest
0 голосов
/ 26 октября 2018

У меня есть один массив, как показано ниже

 [
   {
      "key":"Human Resources",
      "data":[
         {
            "id":"1HwahYXr5hs3IDTn7RtC",
            "element":{
               "id":"1HwahYXr5hs3IDTn7RtC",
               "ca":"1x"

            },
            "groupBy":"Human Resources_Human Resources"
         },
         {
            "id":"I7kCoWl7JLCWvgSdZm6p",
            "element":{
               "id":"I7kCoWl7JLCWvgSdZm6p",
               "ca":"2x"

            },
            "groupBy":"Human Resources"
         }
      ]
   },
   {
      "key":"Marketing",
      "data":[
         {
            "id":"Ltgk4vvKNILwYry1thXL",
            "element":{
               "id":"Ltgk4vvKNILwYry1thXL",
               "ca":"5x"
            },
            "groupBy":"Marketing_Marketing"
         },
         {
            "id":"aA43supw5IYmVLkniC8c",
            "element":{
               "id":"aA43supw5IYmVLkniC8c",
               "ca":"6x"
            },
            "groupBy":"Marketing"
         }
      ]
   },
   {
      "key":"Sales",
      "data":[
         {
            "id":"WwYl7FelUSVo8i5eMYMk",
            "element":{
               "id":"WwYl7FelUSVo8i5eMYMk",
               "ca":"8x"
            },
            "groupBy":"Sales"
         }
      ]
   }
]

У меня есть другой массив, в котором хранится рейтинг ключа указанного выше массива, как показано ниже

[
{
"id":1,
"name":"Marketing",
"rank":2
},
{
"id":1,
"name":"Human Resources",
"rank":1
}
]

Мне нужно отсортировать первый массив в зависимости от ранга ключа во втором массиве. Если какой-либо ключ находится не во втором, он будет наверху.

Пожалуйста, посоветуйте, есть ли какая-нибудь встроенная функция, которая может делать это, как любая функция в lodash.

Спасибо

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Вы можете forEach ранчо, фильтровать данные и добавлять диапазон свойств, затем сортировать данные

0 голосов
/ 26 октября 2018

Это должно работать,

arr.sort((a,b) => {
  rank1 = rank.find(e => e.name ===a.key);
  rank2 = rank.find(e => e.name ===b.key);
  if (!rank1 || !rank2) {
    return 1;
  }
  if (rank1.rank < rank2.rank) {
    return -1;
 } else {
   return 1;
}
})
0 голосов
/ 26 октября 2018

Вы можете взять ранг или -Infinity за не присвоенные ранги для сортировки наверх.

var array = [{ key: "Human Resources" }, { key: "Marketing" }, { key: "Sales" }],
    ranking = [{ id: 1, name: "Marketing", rank: 2 }, { id: 1, name: "Human Resources", rank: 1 }],
    order = ranking.reduce((o, { name, rank }) => (o[name] = rank, o), Object.create(null));

array.sort(({ key: a }, { key: b }) => (order[a] || -Infinity) - (order[b] || -Infinity));

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
...