首页 > 解决方案 > 如何比较嵌套数组和常规数组?

问题描述

我有这两个数组,一个是嵌套数组,一个是常规数组。都包含字符串。我需要遍历常规数组并评估元素是否仅匹配“声明”键和“匹配”键,但不匹配排除键。这样做的最佳方法是什么?

  const claimsArr = [
    {claim:'Protein',matches:['high in protein','^protein'],exclusions:['whey','milk']},
    {claim:'Carbs',matches:['high in carbs','^carbs'],exclusions:['sugar','lactose']},
     ]

  DomArray = [
        "Protein", "whey" , 
      ]
  

如果 DomArray 包含“声明”&&“匹配”而不是“排除”中的内容,我想要的输出将是匹配项的数组

预期输出:

result = ["Protien", "whey", "high in protein" ,"protein"]

标签: javascript

解决方案


您可以混合使用 of filterincludes函数Array来实现此目的。

const claimsArr = [
  {
    claim: 'Protein',
    matches: ['high in protein', '^protein'],
    exclusions: ['whey', 'milk'],
  },
  {
    claim: 'Carbs',
    matches: ['high in carbs', '^carbs'],
    exclusions: ['sugar', 'lactose'],
  },
];
const DomArray = ['Protein', 'whey'];

const isAMatch = (str) => DomArray.some(dom => str.toLowerCase().includes(dom.toLowerCase()))

const result = claimsArr.reduce((a, c) => {
  const matches = [c.claim, ...c.matches].filter(isAMatch);
  a.push(...matches);
  return a;
}, [])

console.log(result)


推荐阅读