Пользовательский поиск - Как изменить порядок массива относительно значения в массиве - PullRequest
0 голосов
/ 22 февраля 2019

Допустим, у меня есть массив

const arr = [
  {
    name: "Baburam",
    relation: "self_owner"
  },
  {
    name: "Prapti",
    relation: "grand_child"
  },
  {
    name: "Sanjay",
    relation: "son"
  },
  {
    name: "Bhagwati",
    relation: "wife"
  },
  {
    name: "maya",
    relation: "mother"
  },
]

Я хочу изменить порядок массива относительно указанного значения отношение , и этот порядок фиксирован:

  1. Самовладелец

  2. жена

  3. мать

  4. сын

  5. grand_child

Как я могу получить такой результат.Что я ожидаю, это:

const arr = [
  {
    name: "Baburam",
    relation: "self_owner"
  },
  {
    name: "Bhagwati",
    relation: "wife"
  },
  ,
  {
    name: "Sanjay",
    relation: "son"
  },
  {
    name: "maya",
    relation: "mother"
  },
  {
    name: "Prapti",
    relation: "grand_child"
  }
  
]

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 22 февраля 2019

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

const fixedOrder =['self_owner','wife','mother','son','grand_child']

const orderedArr=arr.sort(function(a, b) {
   return a.fixedOrder.indexOf(a.relation) - b.fixedOrder.indexOf(a.relation);
});
0 голосов
/ 22 февраля 2019

Создайте массив order с элементами relation в нужном вам порядке.Затем используйте indexOf в функции сравнения sort

const order = ["self_owner","wife","mother","son","grand_child"];
const arr = [{name:"Baburam",relation:"self_owner"},{name:"Prapti",relation:"grand_child"},{name:"Sanjay",relation:"son"},{name:"Bhagwati",relation:"wife"},{name:"maya",relation:"mother"},]

arr.sort((a,b) => order.indexOf(a.relation) - order.indexOf(b.relation))
console.log(arr)
0 голосов
/ 22 февраля 2019

Вы можете использовать Array.prototype.reduce () в сочетании с Array.prototype.find ()

Код:

const arr = [{name: "Baburam",relation: "self_owner"},{name: "Prapti",relation: "grand_child"},{name: "Sanjay",relation: "son"},{name: "Bhagwati",relation: "wife"},{name: "maya",relation: "mother"}]; 
const order = ['self_owner', 'wife', 'mother', 'son', 'grand_child'];

const result = order.reduce((a, c) => [...a, arr.find(user => user.relation === c)], []);

console.log(result);
0 голосов
/ 22 февраля 2019

Храните ваш заказ в array, а затем сортируйте в соответствии с index из relation Объекта в arr

const sortorder =['self_owner','wife','mother','son','grand_child']
const arr = [
  {
    name: "Baburam",
    relation: "self_owner"
  },
  {
    name: "Prapti",
    relation: "grand_child"
  },
  {
    name: "Sanjay",
    relation: "son"
  },
  {
    name: "Bhagwati",
    relation: "wife"
  },
  {
    name: "maya",
    relation: "mother"
  },
]
let sorted = arr.sort((a,b) => sortorder.indexOf(a.relation) - sortorder.indexOf(b.relation));
console.log(sorted);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...