对一个 observable 数组进行排序,该数组已查询到由微风JS 返回的数据

Posted

技术标签:

【中文标题】对一个 observable 数组进行排序,该数组已查询到由微风JS 返回的数据【英文标题】:Sorting an observable array, which has queried data returned by breezeJS 【发布时间】:2015-09-04 00:03:53 【问题描述】:

上面的图片是observableArray,它是在使用微风JS(使用EntityManager)查询数据库时出现的。

我的问题是

我们如何根据一些标准对这个 observable 进行排序,即, (object.attributeName) ?

所以这个数组是根据一些属性名称排序的,我们可以简单地在 foreach 绑定中使用 observable 并以排序方式使用它们,因为我不想一直查询(本地或从服务器)来获取数据排序顺序。

【问题讨论】:

试试latestvalue().sort(function (a, b) return a.someAttr() > b.someAttr() ? 1 : -1 ) 应该可以。欢呼 【参考方案1】:

所以做一个计算

var orderDirection = ko.observable(1);
var orderField = ko.observable("id");
var orderedObsArr = ko.computed(function()
     var oDir = orderDirection();
     var oField = orderField();
     var newArr = originalObsArr().slice(0);
     newArr.sort(function(a,b)
         return oDir * (a[oField] > b[oField] ? 1 : -1);
     );
     return newArr;
);

所以要更改为 name 降序排序,您只需更改:

orderDirection(-1);
orderField("name");

并且您的计算依赖orderedObsArr 将被更新。

有关工作示例,请参阅 this pen。

【讨论】:

不错。只想强调 obsArr().slice 的重要性:这确保排序的数组是原始数组的 副本,因此原始数组按顺序保持不变.

以上是关于对一个 observable 数组进行排序,该数组已查询到由微风JS 返回的数据的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift 可观察数组排序

使用计数值对数组进行排序

对具有不确定数据的数组进行排序

如何根据 array[0] 元素对数组的 ArrayList 进行排序,该元素是以 dd/mm/yyyy 格式给出的日期?

使用标准库根据一个数组对两个数组进行排序(避免复制步骤)

我有一个这样的数组对象,我想根据 _0 属性对该数组进行排序,请在 Javascript 或 Dojo 中提出一些解决方案