Сортировка массива объекта по начальному значению, чтобы всегда быть первым - PullRequest
0 голосов
/ 25 октября 2019

Учитывая массив и переменную следующим образом.

array = ['complete','in_progress','planned'];
value = 'planned';

Я хочу отсортировать массив всегда, начиная с переменной 'value', которую должен отображать вывод.

array = ['planned','in_progress','complete'];

например.

array = ['complete','in_progress','planned'];
value = 'in_progress';

будет выводиться ...

array = ['in_progress','complete','planned'];

Я пробовал разные способы, но мне не удалось найти достойное решение. Какие-нибудь чистые и короткие идеи?

Ответы [ 2 ]

1 голос
/ 25 октября 2019

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

const array = ['complete','in_progress','planned'];
const value = 'in_progress';

array.sort((a, b) => {
  //a comes first
  if (a == value) return -1;
  //b comes first
  if (b == value) return 1;
  
  //neither matches `value` - compare them normally
  return a.localeCompare(b);
});

console.log(array);

И это более короткая версия того же самого (несколько) злоупотребляющего принуждением типов:

const array = ['complete','in_progress','planned'];
const value = 'in_progress';

array.sort((a,b) => ((a == value) * -1) || b == value || a.localeCompare(b));

console.log(array);
0 голосов
/ 25 октября 2019

От макушки головы вы можете попробовать

array = ['complete','in_progress','planned'];
target = 'in_progress';

const answer = array.filter((element) => element !== target)
    .sort()
    .reduce((accumulator, value) => [...accumulator, value], [target]);

изменить: я забыл, что нужно отсортировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...