如何从数组中获取唯一数据?

时间:2014-01-22 23:40:23

标签: json object filter sencha-touch-2 store

我想从我的Array / JSON中获取唯一的记录。

我的对象看起来像这样:

        [
{
"name":"SAP R3 Vertriebskenntnisse",
"ontocat":"SAP_R3_Vertrieb"
},
{
"name":"Kenntnisse SAP-ISU",
"ontocat":"KenntnisseSAPISU"
},
{
"name":"Microsoft Office",
"ontocat":"MicrosoftOffice"
},
{
"name":"SAP",
"ontocat":"SAP"
},
{
"name":"SAP R3 Vertriebskenntnisse",
"ontocat":"SAP_R3_Vertrieb"
},
{
"name":"SAP",
"ontocat":"SAP"
},
{
"name":"SAP",
"ontocat":"SAP"
},
{
"name":"Kenntnisse SAP-MM",
"ontocat":"KenntnisseSAPMM"
},
{
"name":"SAP",
"ontocat":"SAP"
},
{
"name":"SAP",
"ontocat":"SAP"
}
]

所以你怎么看到有很多同名的条目。

如果只剩下一个独特的条目,我该怎么做?

还有Sencha商店的其他原因。上面的对象被添加到JSON存储中。也许有一种更容易的方法来隔离价值观。

提前致谢,请询问您是否需要更多详情。

1 个答案:

答案 0 :(得分:0)

我用一个适合你场景的removeDuplicates函数写了一个快速的Sencha Touch控制器,这里是代码:

Ext.define('MyApp.controller.Main', {
    extend: 'Ext.app.Controller',

    init: function(application) {
        console.log('INIT MAIN');

        var json = '[{"name":"SAP R3 Vertriebskenntnisse","ontocat":"SAP_R3_Vertrieb"},{"name":"Kenntnisse SAP-ISU","ontocat":"KenntnisseSAPISU"},{"name":"Microsoft Office","ontocat":"MicrosoftOffice"},{"name":"SAP","ontocat":"SAP"},{"name":"SAP R3 Vertriebskenntnisse","ontocat":"SAP_R3_Vertrieb"},{"name":"SAP","ontocat":"SAP"},{"name":"SAP","ontocat":"SAP"},{"name":"Kenntnisse SAP-MM","ontocat":"KenntnisseSAPMM"},{"name":"SAP","ontocat":"SAP"},{"name":"SAP","ontocat":"SAP"}]',
            arr = Ext.JSON.decode(json),
            output;

        output = this.removeDuplicates(arr);

        console.log(output);
    },

    removeDuplicates: function(arr) {
        var nameList = [],
            output = [];

        for (var i = 0; i < arr.length; i++) {
            //check if the nameList array has an instance of the name
            if (nameList.indexOf(arr[i].name) === -1) {
                //push a reference of the name to the temporary nameList array
                nameList.push(arr[i].name);
                //push the object to the output array
                output.push(arr[i]);
            }
        };

        return output;
    }
});