javascript - 过滤对象数组,并在第二个数组上进行 foreach 条件

标签 javascript arrays filter ecmascript-5

几个小时后我遇到了麻烦——想知道是否有新手开发人员可以查看下面的内容,代码已简化以显示问题。

我正在过滤对象数组的属性值,并使用具有匹配键和 bool 值的数组交叉引用该属性,以控制是否应将其纳入过滤器。

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

非常感谢...

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;
});

最佳答案

您正在使这比您需要的复杂一点。传递给 filter() 的函数应该返回一个 bool 值——您返回的是一个数组。

您可以简单地使用 filter 数组上的查找进行过滤,它将返回 falseundefined,在这种情况下您可以过滤它out,或者 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)

关于javascript - 过滤对象数组,并在第二个数组上进行 foreach 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51014371/

相关文章:

python - 按内部值过滤列并获取索引

javascript - 如何在 Ruby on Rails 中合并列中的重复项?

arrays - 如何在 swift 中过滤具有其他数组值的结构数组?

javascript - 从字符串生成 block

php - 如何在mysql中获取多条记录并将其存储到json数组中

javascript - 如何在新窗口中打开网址而不失去当前窗口的焦点

javascript - 即使 xmlhttp.status 等于 200,xmlhttp.readyState 返回 2

sql - 将数组与多维数组的元素进行比较

javascript - 如何将 3 列中的 JSON 变量中的数据显示到 bootstrap 模式中

javascript - 尝试将 SimpleBar 导入 Angular 2 应用程序时,X 不是构造函数