【问题标题】:Javascript Filter with one or more than field具有一个或多个字段的 Javascript 过滤器
【发布时间】:2018-04-18 19:24:34
【问题描述】:

我正在研究 JavaScript 过滤器。我必须根据以下要求过滤一列或多列的数据,请参阅下面的对象示例。

var arr = [
      {
       "t_id" : "abc",
       "s_id" : "pai"
      },
      {
       "t_id" : "pai",
       "s_id" : "par"
      },
      {
       "t_id" : "pai",
       "s_id" : "pas"
      },
      {
       "t_id" : "pai",
       "s_id" : "pai"
      },
      {
       "t_id" : "par",
       "s_id" : "pas"
      }      
]

当我将过滤器用于字段 t_id 和 'pai' 值时,它将返回对象下方。

{
           "t_id" : "pai",
           "s_id" : "par"
          },
          {
           "t_id" : "pai",
           "s_id" : "pas"
          },
          {
           "t_id" : "pai",
           "s_id" : "pai"
          }

当我使用带有“pai”值的字段 s_id 应用过滤器时,它应该返回对象下方。

         {
           "t_id" : "abc",
           "s_id" : "pai"
          },
          {
           "t_id" : "pai",
           "s_id" : "par"
          },
          {
           "t_id" : "pai",
           "s_id" : "pas"
          },
          {
           "t_id" : "pai",
           "s_id" : "pai"
          }

基本上什么时候我会为字段“s_id”应用过滤器。它也会考虑过滤“t_id”。提前致谢。

【问题讨论】:

  • 请向我们展示您的尝试。我们可以从那里开始。

标签: javascript filter


【解决方案1】:

使用过滤器返回true任一条件匹配:

var arr = [{"t_id":"abc","s_id":"pai"},{"t_id":"pai","s_id":"par"},{"t_id":"pai","s_id":"pas"},{"t_id":"pai","s_id":"pai"},{"t_id":"par","s_id":"pas"}];
console.log(arr.filter(item => item.t_id === 'pai' || item.s_id === 'pai'));

【讨论】:

    【解决方案2】:

    您可以通过传递对象名称和值来实现此目的。

    var arr = [
          {
           "t_id" : "abc",
           "s_id" : "pai"
          },
          {
           "t_id" : "pai",
           "s_id" : "par"
          },
          {
           "t_id" : "pai",
           "s_id" : "pas"
          },
          {
           "t_id" : "pai",
           "s_id" : "pai"
          },
          {
           "t_id" : "par",
           "s_id" : "pas"
          }      
    ]
    
    function myFilter(name, value) {
        var filteredArr = arr.filter(obj => obj[name] === value);
      
        return filteredArr;
    }
    
    var filterTID = myFilter("t_id", "pai");
    var filterSID = myFilter("s_id", "pai");
    
    console.log(filterTID);
    console.log(filterSID);

    【讨论】:

      【解决方案3】:

      在过滤数组的同时,您可以将一个数组作为键来检查并检查属性是否等于所需值。

      var array = [{ t_id: "abc", s_id: "pai" }, { t_id: "pai", s_id: "par" }, { t_id: "pai", s_id: "pas" }, { t_id: "pai", s_id: "pai" }, { t_id: "par", s_id: "pas" }],
          keys = ['t_id', 's_id'],
          value = 'pai',
          result = array.filter(o => keys.some(k => o[k] === value));
      
      console.log(result);
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      【讨论】:

        猜你喜欢
        • 2019-12-29
        • 2019-04-23
        • 1970-01-01
        • 1970-01-01
        • 2017-12-03
        • 2016-11-07
        • 2019-01-29
        • 2017-01-23
        • 1970-01-01
        相关资源
        最近更新 更多