【问题标题】:Checking for "triplicates" strings in JavaScript array检查 JavaScript 数组中的“三次”字符串
【发布时间】:2022-06-15 21:05:56
【问题描述】:



试图找到在字符串数组中检查三次重复值的最佳方法。
我发现了很多 duplicates values 的 stackoverflow 解决方案,但这里的情况并非如此。
这是我能解决这个问题的最快方法,我不确定这是否是正确的方法:

const array = [
    "peace",
    "peace",
    "Vrede",
    "Patz",
    "Salam",
    "paz",
    "Salam",
    "Salam"
  ];

  const findTriplicates = (param) => {
    let counts = {};
    for (let i = 0; i < param.length; i++) {
      if (counts[param[i]]) {
        counts[param[i]] += 1;
      } else {
        counts[param[i]] = 1;
      }
    }
    for (let i in counts) {
      if (counts[i] === 3) {
        console.log(i + " exists " + counts[i] + " times.");
      }
    }
  };

  findTriplicates(array); // Salam exists 3 times. 

请不要犹豫修复我的代码或发布您的解决方案
提前感谢您的支持:)
干杯!

【问题讨论】:

  • 到底是什么问题?因为看起来代码有效。
  • 如果您还想检测“大于或等于三个”​​(我希望如此,但您没有说),则不应执行 counts[i] === 3
  • @Reyno 感谢您的评论,我不确定我的解决方案是否正确。
  • @ASDFGerte 我同意那么它应该是counts[i] &gt; 2,但为了不让我的问题复杂化,我将标题编辑为“仅三次”。
  • Well "correct" 完全可以解释,并且可能因每个开发人员而异。这将导致opinion based 不允许的问题/答案。如果您正在寻求改进,我建议您在 codereview.stackexchange.com 上发布您的问题。

标签: javascript arrays compare similarity


【解决方案1】:

您的总体想法很好,使用哈希映射(js 对象)是该任务的最佳选择。

您可以将“=== 3”检查移动到第一个循环,并让另一个对象保存三次,这样会快两倍。

【讨论】:

  • 这会将一式四次及以上错误地识别为三联式。此外,它更慢,因为您更频繁地检查 === 3 或者至少是相当的。如果我没记错的话
【解决方案2】:

看看这个

  const findTriplicates = (param) => {
  let values = [...new Set(param)];
  let triples = [];

  values.forEach(item=>{
    let counter = 0;
    param.forEach(s=>{
      if(s===item) counter++;
    })
    if(3==counter) triples.push(item);
  })

  return triples;
  };

【讨论】:

    【解决方案3】:

    没有正确的方法来做这样的事情。您始终可以优化或牺牲性能以提高可读性,但这取决于开发人员。

    我没有改变功能,但代码非常不同。

    const array = [
      "peace",
      "peace",
      "Vrede",
      "Patz",
      "Salam",
      "paz",
      "Salam",
      "Salam"
    ];
    
    const findTriplicates = (param) => {
      let counts = param.reduce((acc, p) => {
        acc[p] ? acc[p]++ : acc[p] = 1
        return acc;
      }, {})
      Object.keys(counts).forEach((key) => counts[key] === 3 &&
        console.log(`${key} exists 3 times.`)
      );
    };
    
    findTriplicates(array); // Salam exists 3 times.

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      相关资源
      最近更新 更多