如何从MemoryStore获取max“id”?

时间:2014-03-26 09:09:39

标签: javascript dojo

我指的是示例here。我如何获得最大ID?

2 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。例如,您可以根据ID对商店进行排序并获取第一个元素,例如:

store.query({ }, {
    sort: [{
        attribute: "id",
        descending: true
    }]
})[0].id;

在这个例子中,它查询商店内的所有对象,按ID(降序)对它们进行排序。这显然意味着第一个元素具有最高的ID,因此您可以获取该项并检索ID属性。

关于这一点的好处是它只使用Dojo商店API,这意味着这将适用于实现dojo/store API的任何商店,例如dojo/store/Memory


另一个解决方案是自己搜索ID,你可以像Lukasz在his answer中那样做,但如果你使用store.data,这意味着它只适用于dojo/store/Memory并且您正在访问您不应访问的属性。

所以要自己搜索一下,你可以使用:

require([ "dojo/store/Memory", "dojo/_base/array" ], function(Memory, arrUtils) {
    var maxId = null;
    arrUtils.forEach(store.query({}), function(obj) {
        if (maxId === null || (obj !== null && obj.id > maxId)) {
             maxId = obj.id;   
        }
    });
});

这里发生的是我浏览商店内的每个对象,然后检查maxIdnull(=未设置)还是对象ID大于maxId如果这是真的,那么我们将maxId替换为当前对象的ID。

答案 1 :(得分:1)

MemoryStore只是保留一些任意数据,当我需要获得最大ID时,我会迭代所有元素:

var data = store.data
var maxId = 1
var idField = 'id'
for (var i=0;i<data.length;i++) {
  var row = data[i]
  if (row[idField] && row[idField] > maxId)
    maxId = row[idField]
}