Как отсортировать пока значение и вернуть только предметы выше определенного значения? - PullRequest
0 голосов
/ 15 января 2019

Я хотел бы отсортировать массив объектов, чьи элементы в методе сортировки прошли через функцию, которая заставляет их возвращать значение, а затем вернуть элементы объектов, значение которых превышает определенное число.

Я пробовал это:

sortedObject(){
  return this.arrayOfObjects.sort((a, b) =>
    (this.formatValue(b) > 0.7) - (this.formatValue(a) > 0.7)
  )
}

this.formatValue получает элемент и через серию вычислений из свойств объекта возвращает значение от 0 до 1. Я хочу, чтобы сортировка возвращала только те элементы, значение которых превышает 0,7, и сортировала их в вычисленном sortedObject имущество. Предмет со значением ниже 0,7 не будет включен в sortedObject.

Ответы [ 3 ]

0 голосов
/ 15 января 2019

труба пользовательского фильтра здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

sortedObject(){
  return this.arrayOfObjects
..filter(a=> a > 0.7);
.sort((a, b) =>
    (this.formatValue(b) > 0.7) - (this.formatValue(a) > 0.7)
  )
}
0 голосов
/ 15 января 2019

sort функция возвращает массив той же длины, что и исходный массив. Таким образом, вы не можете сделать это за один звонок. Вам нужно filter, как это, прежде чем звонить sort.

sortedObject() {
  return this.arrayOfObjects
             .filter(a => this.formatValue(a) > 0.7)
             .sort((a, b) => this.formatValue(b) - this.formatValue(a))
}

Если formatValue() - дорогостоящая операция, и вы хотите вызывать ее только один раз для объекта, тогда вы можете map передать ее в новый массив, прежде чем выполнить filter. Но это возвращает массив объектов с дополнительным свойством formatValue

sortedObject() {
  return this.arrayOfObjects
    .map(a => ({ formatValue: this.formatValue(a), ...a}))
    .filter(a => a.formatValue > 0.7)
    .sort((a, b) => b.formatValue - a.formatValue)
}

Другой вариант - использовать свойство getter внутри каждого объекта и вызывать в нем функцию formatValue().

0 голосов
/ 15 января 2019

Если это не просто сортировка, вам нужно сначала отфильтровать элементы с <0,7, а затем отсортировать остальные: </p>

Сначала я отобразил бы только вычисленные значения, затем отфильтровал их и затем отсортировал:

sortedObject(){
  return this.arrayOfObjects.map(a => this.formatValue(a))
                            .filter(a => a > 0.7)
                            .sort((a, b) => b - a)
}

Редактировать

sortedObject(){
  return this.arrayOfObjects.filter(a => this.formatValue(a) > 0.7)
                            .sort(
                              (a, b) =>
                                this.formatValue(b) - this.formatValue(a)
                            )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...