我想对对象数组进行排序,这些对象的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
中。
答案 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()
函数。