如何获得max ';id ';从MemoryStore

How to get max "id" from MemoryStore?

本文关键字:MemoryStore id 何获得 max      更新时间:2023-09-26

我指的是这里的例子。如何得到最大id?

有很多方法可以做到。例如,您可以根据ID对存储进行排序,并获得第一个元素,例如:

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

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

这样做的好处是它只使用Dojo存储API,这意味着它可以在任何实现dojo/store API的存储上工作,例如dojo/store/Memory


另一个解决方案是自己搜索ID,你可以像Lukasz在他的回答中那样做,但是如果你使用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;   
        }
    });
});

这里发生的是,我遍历存储中的每个对象,然后检查maxId是否为null(=未设置),或者对象ID是否大于maxId,如果这是真的,那么我们用当前对象的ID替换maxId

MemoryStore只是保存一些任意数据,当我需要获得max 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]
}