代码之家  ›  专栏  ›  技术社区  ›  fyllepo

对对象数组进行筛选,并针对条件对第二个数组进行foreach

  •  2
  • fyllepo  · 技术社区  · 7 年前

    几个小时后,我遇到了一个障碍——想知道一个头脑清醒的开发人员是否可以回顾一下下面的内容,代码被简化以显示问题。

    我正在筛选对象数组上的属性值,并将该属性与具有匹配键的数组以及要控制是否应将其分解到筛选器中的布尔值交叉引用。

    然而,我的结果是返回所有3个对象,尽管console.log看起来评估正确。有什么想法吗?

    非常感谢…

    var data = [{
        "id": 1,
        "status": "new",
      },
      {
        "id": 2,
        "status": "rejected",
      },
      {
        "id": 3,
        "status": "changed",
      }
    ];
    
    var filter = {
      "new": true,
      "rejected": false,
      "changed": true
    }
    
    var result = data.filter(function(item) {
      var arr = [];
    
      Object.keys(filter).forEach(function(key) {
        if (item.status === key && filter[key] === true) {
    
          console.log('---')
          console.log('item.status', item.status)
          console.log('key', key)
          console.log('filter[key]', filter[key])
          console.log('---')
    
          arr.push(item);
        }
      });
    
      return arr;
    });
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   Mark    7 年前

    你让事情变得比你需要的复杂一点。传递给的函数 filter()

    filter false undefined true ,在这种情况下,你保留它……

    var data = [{
        "id": 1,
        "status": "new",
      },
      {
        "id": 2,
        "status": "rejected",
      },
      {
        "id": 3,
        "status": "changed",
      }
    ];
    
    var filter = {
      "new": true,
      "rejected": false,
      "changed": true
    }
    
    var result = data.filter(item => filter[item.status])
    
    console.log(result)
        2
  •  2
  •   CertainPerformance    7 年前

    filter

    var data=[{"id":1,"status":"new",},{"id":2,"status":"rejected",},{"id":3,"status":"changed",}]
    var filter = {
      "new": true,
      "rejected": false,
      "changed": true
    }
    
    var result = data.filter((item) => filter[item.status])
    console.log(result);
        3
  •  2
  •   Tholle    7 年前

    filter 将创建一个新数组, item

    var result = data.filter(function(item) {
      return filter[item.status];
    });