【问题标题】:Need JS array negative filter based on another array需要基于另一个数组的JS数组负过滤器
【发布时间】:2022-02-05 16:26:01
【问题描述】:

我需要有关过滤 Javascript 数组以删除不包含第二个数组中列出的一系列字母中的至少一个的名称的帮助。我一遍又一遍地尝试,使用 filter() 的组合,以及嵌套的 FOR 循环。示例:

name = ["chuck","lina","wanda","denise","re​​ggie","candy"];
字母 = ["h","l","z","e"];

filter() 返回的数组应该是:
nametwo = ["旺达","糖果"];

这很容易解释,但我无法让它在代码中工作。我在这里找到了很多 filter() 的例子,但没有一个有帮助。谢谢!

【问题讨论】:

  • 大家好 - 感谢您的回复。一切都好...

标签: javascript arrays filter


【解决方案1】:

基本上同一个问题here

const name = ["chuck","lina","wanda","denise","reggie","candy"];
const letter = ["h","l","z","e"];

const checker = value =>
  !letter.some(element => value.includes(element));

console.log(name.filter(checker));

【讨论】:

    【解决方案2】:

    要在字符串中搜索字母,你应该使用 indexOf 函数。

    如果您想要单线解决方案,您可以这样做:

    const names = ["chuck","lina","wanda","denise","reggie","candy"];
    const letters = ["h","l","z","e"];
    const result = names.filter(name => letters.filter(letter => name.indexOf(letter) !== -1).length === 0);
    
    console.log(result)

    你可以使用两个周期来做到这一点:

    const names = ["chuck","lina","wanda","denise","reggie","candy"];
    const letters = ["h","l","z","e"];
    
    const result = [];
    for (let i = 0; i < names.length; i++) {
        let isContainLetter = false;
        for (let j = 0; j < letters.length; j++) {
          if (names[i].indexOf(letters[j]) !== -1) {
            isContainLetter = true;
            break;
          }
        }
      if (!isContainLetter) result.push(names[i]);
    }
    
    console.log(result)

    【讨论】:

    • 我喜欢这个答案,因为它解释了逻辑,而不仅仅是提供代码。
    【解决方案3】:

    您可以使用every 过滤并检查名称是否不包含字母。

    const
        names = ["chuck", "lina", "wanda", "denise", "reggie", "candy"],
        letters = ["h", "l", "z", "e"],
        result = names.filter(n => letters.every(l => !n.includes(l)));
    
    console.log(result); // ["wanda", "candy"]

    【讨论】:

    • 精彩,绝对精彩。奇迹般有效。哇。谢谢!
    【解决方案4】:

    我们可以使用

    • Array.every() 方法来测试数组中的所有元素是否通过提供的函数实现的测试。它返回一个布尔值。
    • 然后我们可以使用Array.filter() 方法创建一个新数组,其中包含所有通过所提供函数实现的测试的元素。

    工作演示:

    const name = ["chuck","lina","wanda","denise","reggie","candy"];
    const letter = ["h","l","z","e"];
    
    const resultArr = name.filter((word) => letter.every((char) => !word.includes(char)));
    
    console.log(resultArr);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      相关资源
      最近更新 更多