对一个 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 返回的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 array[0] 元素对数组的 ArrayList 进行排序,该元素是以 dd/mm/yyyy 格式给出的日期?
我有一个这样的数组对象,我想根据 _0 属性对该数组进行排序,请在 Javascript 或 Dojo 中提出一些解决方案