首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过滤一个或多个匹配的字符串以减少数据集

过滤一个或多个匹配的字符串以减少数据集
EN

Stack Overflow用户
提问于 2018-01-12 00:16:45
回答 1查看 84关注 0票数 2

我正在尝试根据存储在localStorage中的字符串过滤一组数据。字符串的数量可以是0- 4。(如果字符串存在,则在逗号处将其拆分)。

目前,我的函数循环遍历数据,并仅根据第一个字符串缩减集合。

我需要一些方法来循环数据x次,并使用push (我假设)将过滤后的数据存储到一个新的数组中。我猜它传递了第一个字符串选择器并减少了集合。

我这里有一个jsfiddle:https://jsfiddle.net/lharby/fxv94185/1

为简单起见,我只是将字符串存储到一个变量中(而不是使用jsfiddle本地存储)。var chQualityFilters = "ok,ko"可以在小提琴中将其更改为空字符串,或四个选择器中的一个或多个'ok','ko','spark','oos‘。

完整的代码在这里:

代码语言:javascript
复制
var url = 'https://api.myjson.com/bins/14xw8x';
var dataWrapper = $('.data-wrapper');
var endSpan = '</span><span>';
var spanWide = '</span><span class="wide">';
var chQualityFilters = "ok,ko"; // this can be 1 or more of 'ok', 'ko', 'spark', 'oos'

returnQualityData = function(){
  $.ajax({
    type:'GET',
    url:url,
    dataType:'json',
    success:function(data){
      if (chQualityFilters !== null && chQualityFilters !== 'none') {
        getSetFilters();
      }
      var filteredData = data.filter(function(d){
        for(var i=0; i<chQualityFilters.length; i++){ // how to loop over the chQualityFilters array a second time. 
          return (d.Status.toLowerCase() == chQualityFilters[i]);
        }
      });
      console.log(filteredData);
      dataWrapper.empty();
      dataWrapper.prepend('<li class="title"><span>'
                          +'Date' + spanWide
                          +'Database name' + spanWide
                          +'Table name'+ endSpan
                          +'Lake <br />volume'+ endSpan
                          +'Source <br />volume'+ endSpan
                          +'Difference'+ endSpan
                          +'Null %'+ endSpan
                          +'Std. index'+ endSpan
                          +'Hazard <br />index'+ endSpan
                          +'Source data available'+ endSpan
                          +'Status'
                          +'</span></li>');
      for(var i in filteredData){
        var statusLowerCase = filteredData[i]["Status"].toLowerCase();
        var year = filteredData[i]["Data Date"].slice(0,4);
        var month = filteredData[i]["Data Date"].slice(4,6);
        var day = filteredData[i]["Data Date"].slice(6,8);
        var date = day+ "/" +month+ "/" +year;
        dataWrapper.append('<li class="' +statusLowerCase+ '"><a href="#"><span>'
                           +date+ spanWide
                           +filteredData[i]["Database Name"]+ spanWide
                           +filteredData[i]["Table Name"]+ endSpan 
                           +filteredData[i]["Lake Volume"]+ endSpan 
                           +filteredData[i]["Source Volume"]+ endSpan 
                           +filteredData[i].Difference+ endSpan 
                           +filteredData[i]["Null Percent"]+ endSpan 
                           +filteredData[i]["Standardisation Index"]+ endSpan 
                           +filteredData[i]["Hazard Index"]+ endSpan 
                           +filteredData[i]["Source Data Available"]+ '</span><span class="status hideFont ' +statusLowerCase+ '">' +statusLowerCase
                           + '</span></a>'
                           + '<ul class="sub-data">' 
                           + '<li><span>Source database name</span> ' +filteredData[i]["Source Database Name"] + '</li>'
                           + '<li><span>Ingestion frequency</span> ' +filteredData[i]["Ingestion Frequency"]+ '</li>'
                           + '<li><span>Unload type</span> ' +filteredData[i]["Unload Type"]+ '</li>'
                           + '<li><span>Number of columns</span> ' +filteredData[i]["Number Of Columns"]+ '</li>'
                           + '</ul>'
                           + '</li>');
      }
    },
    error:function(status){
    },
    complete:function(){
    }
  });
  return false;
}();

getSetFilters = function() {
  var qualityFilterInput = $('[name="filterStatus"]');
  if (chQualityFilters !== null && chQualityFilters !== 'none') {
    chQualityFilters = chQualityFilters.split(',');
  }

  if(chQualityFilters){
    for(var i=0; i<chQualityFilters.length; i++){
      $('[data-filter="status"] [value=' +chQualityFilters[i]+ ']').prop('checked',true);
    }
  }
}

数据示例:

代码语言:javascript
复制
[  
   {  
      "Database Name":"bu",
      "Table Name":"pro_fis",
      "Status":"OOS",
      "Ingestion Frequency":"Daily - Mon-Sun",
      "Unload Type":"Full",
      "Source Database Name":"n/a",
      "Data Date":"20170426",
      "Number Of Columns":"31",
      "Lake Volume":"384931",
      "Source Volume":"0",
      "Difference":"384931",
      "Difference Percent":"100",
      "Null Percent":"0",
      "Standardisation Index":"79.7425",
      "Hazard Index":"0.000002",
      "Source Data Available":"No"
   },
   {  
      "Database Name":"ca",
      "Table Name":"prepart_",
      "Status":"Spark",
      "Ingestion Frequency":"Daily - Mon-Sun",
      "Unload Type":"Full",
      "Source Database Name":"bp1",
      "Data Date":"20171021",
      "Number Of Columns":"43",
      "Lake Volume":"0",
      "Source Volume":"1699573",
      "Difference":"1699573",
      "Difference Percent":"0",
      "Null Percent":"0",
      "Standardisation Index":"0",
      "Hazard Index":"0",
      "Source Data Available":"Yes"
   },
   {  
      "Database Name":"ca",
      "Table Name":"pte_co",
      "Status":"Spark",
      "Ingestion Frequency":"Daily - Mon-Sun",
      "Unload Type":"Full",
      "Source Database Name":"sv09",
      "Data Date":"20171021",
      "Number Of Columns":"13",
      "Lake Volume":"0",
      "Source Volume":"2848018",
      "Difference":"2848018",
      "Difference Percent":"0",
      "Null Percent":"0",
      "Standardisation Index":"0",
      "Hazard Index":"0",
      "Source Data Available":"Yes"
   }
]

完整的数据集在这里(与小提琴中使用的一样):https://api.myjson.com/bins/14xw8x

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 00:36:32

我认为你需要改变:

代码语言:javascript
复制
for(var i=0; i<chQualityFilters.length; i++){ 
   return (d.Status.toLowerCase() == chQualityFilters[i]);
}

类似这样的东西:

代码语言:javascript
复制
return chQualityFilters.includes(d.Status.toLowerCase())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48211540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档