在MemoryStore(或任意数据数组)中排序数据

Sorting data in MemoryStore (or any arbitrary data array)

本文关键字:数据 数组 排序 任意 MemoryStore      更新时间:2023-09-26

Dojo提供了对MemoryStore或任意数据集合内的数据进行排序的实用程序吗?

我需要来自MemoryStore所有数据,但按单个evt排序。更多的列。如Java中的Collections.sort

我希望商店有sort功能,但我在文档中找不到任何东西。

据我所知,dojo/store API只允许在查询时对数据进行排序。例如:

var store = new Memory({
    data: [{
        "firstName": "Bird",
        "name": "Schultz"
    }, {
        "firstName": "Brittany",
        "name": "Berg"
    }, {
        "firstName": "Haley",
        "name": "Good"
    }, {
        "firstName": "Randolph",
        "name": "Phillips"
    }, {
        "firstName": "Bernard",
        "name": "Small"
    }, {
        "firstName": "Leslie",
        "name": "Wynn"
    }, {
        "firstName": "Mercado",
        "name": "Singleton"
    }, {
        "firstName": "Esmeralda",
        "name": "Huber"
    }, {
        "firstName": "Juanita",
        "name": "Saunders"
    }, {
        "firstName": "Beverly",
        "name": "Clemons"
    }]
});
console.log("Alphabetically by first name:");
store.query({}, {
    sort: [{
        attribute: "firstName",
        descending: false
    }]
}).forEach(function(person) {
    console.log(person.firstName + " " + person.name);
});

您也可以提供多个排序属性。

完整的示例可以在JSFiddle上找到:http://jsfiddle.net/9HtT3/

当我们对数据进行排序时,我们在存储条目之前进行排序。我们将保存在数组中的过滤值使用array.sort()并在函数中调用SortByName或SortByNumbers

看起来像这样:

function streetsToCombobox(results){
    var adress;
    var values = [];
    var testVals={};
    var features = results.features;
    require(["dojo/_base/array","dojo/store/Memory","dijit/registry","dojo/domReady!"], function(array,Memory,registry){        
    if (!features[0]) {
        alert(noDataFound);
    }
    else {
        array.forEach(features, function(feature, i){
            adress = feature.attributes.STRASSE;
            if (!testVals[adress]) {
                testVals[adress] = true;
                values.push({
                    name: adress
                });
            }
        });
        values.sort(SortByName);
        var dataItems = {
            identifier: 'name',
            label: 'name',
            items: values
        };
            storeStreet = new Memory({
                data: dataItems
            });
 //fill existing Combobox ID,NAME,VALUE,SEARCHATTR,ONCHANGE,STORENAME,COMBOBOX  
        fillExistingCombobox(
            "adrSearchSelectCB",
            "adrSearchSelectCBName",
            "",
            "name",
            getAdresses,
            storeStreet,
            registry.byId("adrSearchSelectCBId")
        );              
    }
});
}
function SortByName(x,y) { 
return ((x.name == y.name) ? 0 : ((x.name > y.name) ? 1 : -1 ));    
}

也许这会给你带来一些解决问题的想法。

问候,米里亚姆