Рубрики
Без рубрики

Сортировка объектов с неопределенными значениями

Итак, посмотрите на это: const a = {id: ‘a’, timestamp: 1570790874500} const b = {id: ‘b’} y … Tagged с JavaScript, странно.

Так что посмотрите на это:

const a = { id: 'a', timestamp: 1570790874500 }
const b = { id: 'b' }

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

Вы можете попытаться сортировать их, ожидая, что неопределенные временные метки упадут на дно. Но они не будут.

> const c = [b, a]
> c.sort((i, j) => i.timestamp > j.timestamp)

(2) [{…}, {…}]
  0: {id: "b"}
  1: {id: "a", timestamp: 1570790874500}

Давайте посмотрим на некоторые сравнения, которые на самом деле нам не помогают.

> undefined > 1570790874500

false

> 1570790874500 > undefined

false

Лучшее, что можно сделать в этой ситуации, – это проверить существование поля временной метки в рамках предиката сортировки и сравнить значения только при наличии поля. В зависимости от того, хотите ли вы сначала или последнее, вы хотите, чтобы объекты с неопределенным полем вы изменили, какой объект вы проверяете на метку времени и возвращаете True, когда они не определены.

Давайте создадим некоторые данные.

> const list = [
    { id: 'a', timestamp: 1535090874500 },
    { id: 'b' },
    { id: 'c' },
    { id: 'd', timestamp: 1570790874500 },
    { id: 'e', timestamp: 1510790874500 }
  ]

Итак, для неопределенного последнего вы проверяете первый пройденный объект.

> list.sort((a, b) => !!a.timestamp ? a.timestamp > b.timestamp : true)

[ { id: 'e', timestamp: 1510790874500 },
  { id: 'a', timestamp: 1535090874500 },
  { id: 'd', timestamp: 1570790874500 },
  { id: 'c' },
  { id: 'b' } ]

И для сначала неопределенное, вы проверяете второй объект, пройденный.

> list.sort((a, b) => !!b.timestamp ? a.timestamp > b.timestamp : true)

[ { id: 'b' },
  { id: 'c' },
  { id: 'e', timestamp: 1510790874500 },
  { id: 'a', timestamp: 1535090874500 },
  { id: 'd', timestamp: 1570790874500 } ]

И, конечно же, сравнение здесь, A.TimESTAMP> B.TimestAmp Определяет порядок сортировки объектов, где поле это настоящее время.

Оригинал: “https://dev.to/adamkdean/sorting-objects-with-undefined-values-5fdj”