计算数组Javascript中的重复值

计算数组Javascript中的重复值,javascript,algorithm,Javascript,Algorithm,我正在努力练习我的算法技巧。我知道已经有一个算法写出来了,我只是想尝试一下我自己,看看我能有多接近 输入: arr1 = ['asd','ew','lol','asd'] 预期产出: { asd: 2, ew: 1, lol: 1 } 这是我的代码: arr1=['asd','ew','lol','asd'] arr2=[] 结果={} 函数checkIfExists(word){ 如果(arr2.length!=0){ 对于(i=0;i

我正在努力练习我的算法技巧。我知道已经有一个算法写出来了,我只是想尝试一下我自己,看看我能有多接近

输入:

arr1 = ['asd','ew','lol','asd']
预期产出:

{ asd: 2, ew: 1, lol: 1 }
这是我的代码:

arr1=['asd','ew','lol','asd']
arr2=[]
结果={}
函数checkIfExists(word){
如果(arr2.length!=0){
对于(i=0;ilog(results)
您使用了
i
作为全局变量,所以不要使用for two循环。另一个错误是在增量算法中,它向结果数组中添加了超过需要的计数。所以试试看:

arr1=['asd','ew','lol','asd']
arr2=[]
结果={}
函数checkIfExists(word){
如果(arr2.length!=0){
var=false;
对于(var j=0;jlog(results)
您使用了
i
作为全局变量,所以不要使用for two循环。另一个错误是在增量算法中,它向结果数组中添加了超过需要的计数。所以试试看:

arr1=['asd','ew','lol','asd']
arr2=[]
结果={}
函数checkIfExists(word){
如果(arr2.length!=0){
var=false;
对于(var j=0;jconsole.log(results)
我立即确定了三个问题,您可能想问它们

  • 我的代码怎么了?
    • 这句话最适合我说:
      第一个问题是您没有使用
      var
      来声明
      i

    • 该循环可能旨在定位
      arr2
      中的项目,也会修改
      arr2
      很多
  • 为什么我的代码产生不正确的输出?您的代码实际上为它所表达的逻辑产生了正确的输出。我怀疑问题在于它所表达的逻辑与您想要表达的逻辑不匹配。这并不罕见
  • 如何修复代码?
    • 首先,将循环习惯用法从(i=…)的
      更改为(var i=…)
    • 想想这个循环的目的。如果打算在
      arr2
      中定位项目,则不需要修改
      arr2
      。也许你不需要这个循环;
    • 您可能会使用或替换整个循环
    • 您可能可以使用
      函数checkIfExists(word){results[word]=arr1.filter(函数(w){return w==word;}).length;}
      代替整个函数
    • 在设计函数时,您似乎可以使用一些更高级别的意识,因此,尝试将您的头脑集中在以下代码中的一些元素上可能是一个好主意:


  • 有三个问题我马上就确定了,你可能想问

  • 我的代码怎么了?
    • 这句话最适合我说:
      第一个问题是您没有使用
      var
      来声明
      i

    • 该循环可能旨在定位
      arr2
      中的项目,也会修改
      arr2
      很多
  • 为什么我的代码产生不正确的输出?您的代码实际上为它所表达的逻辑产生了正确的输出。我怀疑问题在于它所表达的逻辑与您想要表达的逻辑不匹配。这并不罕见
  • 如何修复代码?
    • 首先,将循环习惯用法从(i=…)的
      更改为(var i=…)
    • 想想这个循环的目的。如果打算在
      arr2
      中定位项目,则不需要修改
      arr2
      。也许你不需要这个循环;
    • 您可能会使用或替换整个循环
    • 您可能可以使用
      函数checkIfExists(word){results[word]=arr1.filter(函数(w){return w==word;}).length;}
      代替整个函数
    • 在设计函数时,您似乎可以使用一些更高级别的意识,因此,尝试将您的头脑集中在以下代码中的一些元素上可能是一个好主意:


  • 好的,这是你的代码。你面临的问题是什么。问题是什么?第一个问题是您没有使用
    var
    来声明
    i
    。这会导致两个循环相互干扰。但即使你解决了这个问题,你也不会得到想要的结果。到目前为止,您在调试代码方面做了哪些工作?你有什么特别的问题吗?@Manish意图应该很清楚:有一个预期的结果和一个实际的结果。标题揭示了代码应该做什么。这比关于堆栈溢出的大多数问题提供的信息都要多。@Xufox同意(和+1d),但我认为Manish有一个观点。。。这里没有问题(用问号表示)!霍
    var arr1 = ['asd','ew','lol','asd'];
    var result = arr1.reduce(function(result, w) { result[w] = result[w] || 0;
                                                   result[w]++;
                                                   return result;              }, {}));
    console.log(result);