JavaScript: сортировать элементы массива там, где «истинные» значения полей идут первыми - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть массив объектов, у каждого из которых есть свойство с именем field. Некоторые значения свойств field являются достоверными:

const arr = [
  {field: true},
  {field: false},
  {field: false},
  {field: true},
  {field: true},
  {field: false}
]

Я хочу отсортировать это так, чтобы все элементы поля true были на первом месте. Как я могу это сделать?

В настоящее время мой код выглядит примерно так:

arr.sort((x, y) => x.field) // ??

Ответы [ 3 ]

3 голосов
/ 25 февраля 2020

Вы можете взять дельту булевых значений. Поскольку true равно единице, а false равно нулю, необходимо изменить значения на обратные.

const array = [{ field: true }, { field: false }, { field: false }, { field: true }, { field: true }, { field: false }]

array.sort((a, b) => b.field - a.field);

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2 голосов
/ 25 февраля 2020

Другой подход заключается в использовании Array#sort и возвращении ключа сортировки -1 или 1 explicity, который приведет к желаемому результату:

const array = [
  {field: true},
  {field: false},
  {field: false},
  {field: true},
  {field: true},
  {field: false}
]


/* Return -1 for sort key when item field value
is truthy bubbles that item to top of the sorted
array. Return 1 pushes item to bottom of sorted
array */
array.sort(item => item.field ? -1 : 1);

console.log(array);
1 голос
/ 25 февраля 2020

Возвращаемое значение sort должно быть числом, чтобы вы могли вычесть свойство field объектов.

 

const arr = [
  {field: true},
  {field: false},
  {field: false},
  {field: true},
  {field: true},
  {field: false}
]
arr.sort((a, b) => b.field - a.field);
console.log(arr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...