gpt4 book ai didi

javascript - 属性 :desc is not the same as reverse 上的 Ember sortBy

转载 作者:行者123 更新时间:2023-11-29 16:46:43 25 4
gpt4 key购买 nike

在 Ember 2 中,我在 Enumerable 上尝试了 sortBy

sortBy('something:asc') 工作正常。但是 sortBy('something:desc')sortBy('something:asc').reverse() 不同。 (不是desc吗?)

我试图将 something 属性更改为 bool 值、字符串或数字。似乎只有“字符串”类型适用于 reverse

最佳答案

实际上,Ember.Enumerable.sortBy方法不采取任何方向,如所见 here ,就是这样Ember.computed.sort有效,如在文档示例中以及在对 here 进行内部调用时所见.

这意味着在您的代码中 "asc" 也不起作用。你只是偶然得到正确的结果。 Relevant github issue

此外,只有字符串作为 sortBy 的参数的原因是因为 sortBy internally calls Ember.get在每个元素上按您提供的名称提取属性,属性名称是字符串。

换句话说,sortBy 的签名是sortBy(property) ( docs )

sortBy 确定元素顺序的方法是调用 compare来自 ember-runtime 的方法,不幸的是,这是一个内部操作,没有 API 可以影响它。

以下是正确进行双向排序的方法:

  • 升序:sortBy('something')
  • 降序:sortBy('something').reverse()(不幸的是)

我相信这是故意的,因为 Ember 遵循 convention over configuration范式,基本上迫使您偏爱使用 Ember.computed.sort,尤其是在性能很重要的情况下。

sortingBy: ['something:desc'],
sortedCollection: Ember.computed.sort('collection', 'sortingBy')

您可以做的另一个解决方法是使用 toArray 将 Enumerable 转换为常规 JS 数组。方法,对其进行排序,然后用新排序的数组覆盖该属性:

const sortedDesc = this.get('something')
.toArray() // convert the enumerable to a regular JS array
.sort(/* your descending sort comparison function */);

this.set('something', sortedDesc);

这会更快(不需要反转数组),但会占用更多内存,因为它会在您每次排序时创建一个新数组(通过调用 toArray)。

关于javascript - 属性 :desc is not the same as reverse 上的 Ember sortBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40168813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com