javascript - 通过具有重复键的另一个数组过滤对象数组

标签 javascript arrays reactjs object ecmascript-6

我有这个对象数组:

const data = [
    {
       id: 1,
       name: 'Name1',
       encryptionKey: 'AAA'
    },
    {
       id: 2,
       name: 'Name2',
       encryptionKey: 'BBB'
    },
    {
       id: 3,
       name: 'Name3',
       encryptionKey: 'CCC'
    }
 ]

以及另一个加密 key 数组:

const encryptionKeys = ['AAA', 'BBB']

然后,我根据 encryptionKeys 数组过滤 data 数组,如下所示:

var filtered = data.filter(function(item) {
   return encryptionKeys.indexOf(item.encryptionKey) !== -1;
});

有效并过滤对象并将它们保存在新数组中。然而,问题是如果 encryptionKey 数组具有重复的 key ,例如:

const encryptionKeys = ['AAA', 'BBB', 'BBB']

那么所有重复的键都将被忽略,在这种情况下,过滤后的数组将只有 2 个对象,而不是 3 个。我在过滤代码中做错了什么?如果 encryptionKeys 数组具有重复的值,则过滤后的数组应具有重复的对象。

最佳答案

记下.flat()的浏览器兼容性,然后查看@babel/polyfill

const data = [
  {
    id: 1,
    name: 'Name1',
    encryptionKey: 'AAA'
  },
  {
    id: 2,
    name: 'Name2',
    encryptionKey: 'BBB'
  },
  {
    id: 3,
    name: 'Name3',
    encryptionKey: 'CCC'
  }
]
const keys = ['AAA', 'BBB', 'BBB', 'AAA', 'BBB', 'ZZZ']

const occurances = data.map(d => {
  const { encryptionKey } = d
  const keyedOccurances = keys
                        .filter(k => k === encryptionKey)
                        .map(k => encryptionKey === k && d)

  return keyedOccurances.length && keyedOccurances
})
.filter(Boolean)
.flat()

console.log(occurances)

关于javascript - 通过具有重复键的另一个数组过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55414305/

相关文章:

javascript - 为什么继承的对象成员可以通过 key 而不是 'hidden' 访问?

arrays - 如何在 Ruby 中的每第 n 个字符后有效地拆分一个很长(数百万个字符)的字符串?

javascript - react 警告 : Functions are not valid as a React child

reactjs - 由于 React SPA 中的 Hasbangs,无法在刷新时访问页面

javascript - 我的用户脚本如何根据链接的文本获取链接?

javascript - AngularJS 过滤另一个数组中的值

c++ - 将 python numpy 数组转换为 C++ STL vector

java - 如何将用户输入添加到java中的数组中?

javascript - React Ant表自定义列计算。如何获取每行中其他项目的长度

javascript - 如何以编程方式打开 jQuery Mobile 弹出窗口并在 5 秒后关闭它