如何对再见值进行排序,仅返回高于某个值的项目?

时间:2019-01-15 12:06:06

标签: javascript vue.js ecmascript-6

我想对对象数组进行排序,这些对象的sort方法中的项通过一个使它们返回值的函数,然后返回值大于某个数字的对象项。

我已经尝试过了:

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

this.formatValue获取一个项目,并通过对象属性的一系列计算返回一个介于0和1之间的值。我希望排序仅返回其值大于0.7的项目,然后将其排序到{{ 1}}计算属性。值低于0.7的项目不会包含在sortedObject中。

3 个答案:

答案 0 :(得分:2)

不仅仅是排序,还需要先过滤<0.7,然后再排序其余部分:

我将首先仅映射计算出的值,然后对其进行过滤,然后对其进行排序:

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)
                            )
}

答案 1 :(得分:1)

用户过滤管在这里 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)
  )
}

答案 2 :(得分:1)

sort函数返回一个长度与原始数组相同的数组。因此,您无法在单个调用中执行此操作。致电sort之前,您需要filter这样。

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()函数。