【问题标题】:How to validate if a letter in an array is repeated?如何验证数组中的字母是否重复?
【发布时间】:2020-07-23 10:10:20
【问题描述】:

我想验证一个数组中的一个字符串不重复超过3次,即:

let array = ['A', 'A', 'A', 'B']
let array2 = ['A', 'A', 'A', 'A', 'B'] <-- Not valid

如果它接收到的数组具有重复这些时间的值,则代码不会继续工作

谢谢

【问题讨论】:

  • 请添加不起作用的内容。

标签: javascript arrays validation


【解决方案1】:

您可以将array.some()array.filter() 结合使用来检查一个值是否只存在x 次。

const array = ['A', 'A', 'A', 'B'];
const array2 = ['A', 'A', 'A', 'A', 'B'];

const isValid = (arr, limit) => {
  return !arr.some((char) => (
    arr.filter((ch) => ch === char).length > limit
    // use the next line for a case insensitive check
    // arr.filter((ch) => ch.toLowerCase() === char.toLowerCase()).length > limit
  ));
}

console.log(isValid(array, 3));
console.log(isValid(array2, 3));

【讨论】:

  • 遍历整个数组中的每个元素并过滤它,这不是很好,因为数组可能会增长到更大的大小。使用some(...) 提早退出并提高性能会更好。
  • @MauriceNino 好点,我把它改成了array.some()
【解决方案2】:

您可以关闭最后一个字符串的计数并检查计数或将计数重置为 1。

const
    check = array => array.every(
        (c => (v, i, { [i - 1]: l }) => l === v ? c++ < 3 : (c = 1))
        (0)
    );

console.log(check(['A', 'A', 'A', 'B']));
console.log(check(['A', 'A', 'A', 'A', 'B']));

【讨论】:

    【解决方案3】:

    您可以使用 reduce 计算所有字母,然后检查它们,如下所示:

    let array = ['A', 'A', 'A', 'B'];
    let array2 = ['A', 'A', 'A', 'A', 'B'];
    
    const allElementsExistUpToN = (arr, n) => {
      const counts = arr.reduce((acc, el) => {
        acc[el] = acc[el] == undefined ? 1 : acc[el] +1;
        return acc;
      }, {});
      return !Object.values(counts).some(c => c > n);
    }
    
    console.log(allElementsExistUpToN(array, 3));
    console.log(allElementsExistUpToN(array2, 3));

    【讨论】:

    • 考虑重命名isRepeatedMoreThanN,因为它似乎做了相反的事情......
    • 没错,我的错误@iAmOren
    • 我也喜欢您将最大计数传递给函数 = 广义。附言。编辑函数名称,以便我对您的答案进行投票...
    • 函数名已编辑,想不出更好的@iAmOren
    • 完成 - 我也可以将其命名为 func,因为它显示的是一个概念,而不是一个已完成的项目 @iAmOren
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 2021-03-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多