Сортировка сложного массива объектов с использованием логического атрибута в JavaScript

1

Я нашел несколько ответов на этот вопрос, но по какой-то причине это не сработало для меня.

У меня есть большой массив объектов, которые нужно сортировать с помощью логического свойства (все те, которые true должны появляться первыми). Самый популярный ответ, который я нахожу, это:

let myList = [
  {
    thing: <div>Something</div>,
    sortingAttribute: false
  },
  {
    thing: <div>Something else</div>,
    sortingAttribute: true
  },
  {
    thing: <div>Whatever</div>,
    sortingAttribute: true
  }
  .
  .
  .
]

myList.sort((x, y) => {
  return (x.sortingAttribute === y.sortingAttribute) ? 0 : x ? -1 : 1
})

К сожалению, это не работает, и я попытался сделать несколько его вариантов, но безуспешно.

Альтернативой этому является просто:

myList.sort((x, y) => {return x.sortingAttribute - y.sortingAttribute})

Однако это также не сработало. Я также попытался использовать функцию сортировки selecters, но ничего.

Я бы не подумал, что это имеет к этому какое-то отношение, но до попытки сортировки я делаю .map() в другом списке, чтобы получить myList как сейчас. Будет ли это как-то причиной проблемы? Кроме того, это довольно прямолинейно.

Вот полная функция:

getMyList (basicArray) {
    let myList = basicArray.map((arr, key) => {
      const sortingAttribute = key > 2 // just used for the example
      // the real code would obviously generate a more random order of trues and falses

      // do other stuff
      return {
        thing: (<div key={key}>{stuff}</div>),
        sortingAttribute: sortingAttribute
      }
    })

    myList.sort((x, y) => {
      return (x.isQualified === y.isQualified) ? 0 : x ? -1 : 1
    })
    console.log('myList SORTED', myList)
  }

В настоящее время отображается точно тот порядок, который выплевывался из .map() So для массива размером 5, мы бы имели:

false, false, false, true, true

  • 1
    Вы делаете myList = myList.sort((x, y) => {return x.sortingAttribute - y.sortingAttribute}) ?
  • 0
    @ Сработало! Спасибо! Если хотите, но это как ответ, чтобы я мог пометить его.
Показать ещё 2 комментария
Теги:
arrays
sorting

1 ответ

2
Лучший ответ

Вы можете взять дельта логического значения b и значение a, потому что true становится значением 1 и false 0 с неявным литьем в число с помощью оператора минус.

var array = [false, true, false, false, true, true, false, true];

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

console.log(array);
  • 0
    Да, глупый я, вероятно, сделал их наоборот. Это сработало! Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню