如何从商店获取唯一/不同的数据?

Posted

技术标签:

【中文标题】如何从商店获取唯一/不同的数据?【英文标题】:How to get unique/Distinct data from store? 【发布时间】:2013-04-03 13:06:07 【问题描述】:

我正在使用 extjs。我需要根据要求从存储中检索不同的数据。 在我的商店中包含单个列表而不是嵌套列表,其中包含美洲、北海和东南亚等地区。这些区域本身具有 subRegion、vesselName 和vesselType 值。我需要根据区域检索唯一值,因为它包含许多重复记录。我已经尝试如下,但它对我不起作用。 谁能告诉我如何实现?。非常感谢。谢谢。

var vesselStore=Ext.getStore('VesselStatusReportStore');
        var arr=new Array();
        var obj;      
        vesselStore.each(function(rec,index)
        
            obj=new Object();
            if(rec.get('region')=='AMERICAS')
                obj.subRegionAmerica=rec.get('subRegion');
                obj.vesselNameAmerica=rec.get('vesselName');
                obj.vesselTypeAmerica=rec.get('vesselType');
            
            if(rec.get('region')=='NorthSea')
                obj.subRegionNorthSea=rec.get('subRegion');
                obj.vesselNameNorthSea=rec.get('vesselName');
                obj.vesselTypeNorthSea=rec.get('vesselType');
            
            if(rec.get('region')=='SE Asia')
                obj.subRegionSEAsia=rec.get('subRegion');
                obj.vesselNameSEAsia=rec.get('vesselName');
                obj.vesselTypeSEAsia=rec.get('vesselType');
            
            arr.push(obj);
            console.log(obj);
        );

json:

[  
    "region" : "AMERICAS",
    "startDate" : null,
    "subRegion" : "US",
    "vesselName" : "Thoma-Sea � Hull #147",
    "vesselType" : "PSV"
  ,
   
    "region" : "AMERICAS",
    "startDate" : null,
    "subRegion" : "US",
    "vesselName" : "Thoma-Sea � Hull #148",
    "vesselType" : "PSV"
  ,
   
    "region" : "AMERICAS",
    "startDate" : null,
    "subRegion" : "Mexico",
    "vesselName" : "Thoma-Sea � Hull #148",
    "vesselType" : "PSV"
  ]

【问题讨论】:

【参考方案1】:

您似乎想使用收集。 http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Store-method-collect

vesselStore.collect('region')

【讨论】:

感谢您的回复。我试过vesselStore.collect('region')。它将提供独特的区域和 sburegion 等。但我需要根据区域获得独特的子区域、船只类型和船只名称。我用 json 更新了我的问题。你可以看到。没有得到如何采取。任何人都可以帮助我。如何实现?【参考方案2】:

这部分没有意义:

            obj=new Object();
            if(rec.get('region')=='AMERICAS')
                obj.subRegionAmerica=rec.get('subRegion');
                obj.vesselNameAmerica=rec.get('vesselName');
                obj.vesselTypeAmerica=rec.get('vesselType');
            
            if(rec.get('region')=='NorthSea')
                obj.subRegionNorthSea=rec.get('subRegion');
                obj.vesselNameNorthSea=rec.get('vesselName');
                obj.vesselTypeNorthSea=rec.get('vesselType');
            
            if(rec.get('region')=='SE Asia')
                obj.subRegionSEAsia=rec.get('subRegion');
                obj.vesselNameSEAsia=rec.get('vesselName');
                obj.vesselTypeSEAsia=rec.get('vesselType');
            
            arr.push(obj);

您基本上是在说“无论区域是什么,将记录复制到 obj,然后将 obj 添加到我的数组中”。

我相信您的意思更接近于这些方面:

var vesselStore=Ext.getStore('VesselStatusReportStore');
var iRegions = [];

vesselStore.each(function(rec,index)

    var iRegionName = rec.get('region');

    // Make sure theres a array item with the region name,
    // if not create a blank array;
    iRegions[ iRegionName ] = iRegions[ iRegionName ] || [];

    // Add the record to its corresponding array item.
    // (If you don't want the full record, you can just get the
    // fields individually like you did in your code).
    iRegions[ iRegionName ] = rec;

console.log( iRegions );

【讨论】:

以上是关于如何从商店获取唯一/不同的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从唯一 id 基础 varchar 数据类型中获取值

Ngrx商店刷新页面后获取用户数据

如何根据条件从每列中获取唯一值?

如何从firebase数据库中获取数据列表?

优化查询以从不同的表中获取唯一(用户)记录

如何从商店获取特定字段的所有值?