【问题标题】:Could someone clarify why if I use one variable its wrong but if I change it to another I get the right solution?有人可以澄清为什么如果我使用一个变量是错误的,但如果我将它更改为另一个我得到正确的解决方案?
【发布时间】:2021-08-22 03:26:42
【问题描述】:

我正在解决这个代码挑战: 创建一个函数countBy,它接受一个数组和一个回调,并返回一个对象。 countBy 将遍历数组并对每个元素执行回调。回调的每个返回值都将保存为对象上的键。与每个键关联的值将是返回特定返回值的次数。

下面是我做的代码

    function countBy(array, callback){
        let newObj = {}
      let numOdd = 0
      let numEv = 0
      for(let i = 0; i < array.length; i++){
        let callbackRes = callback(array[i])
        if(callback(array[i]) === 'even'){
          numEv++
        }
        else if(callback(array[i]) === 'odd'){
          numOdd++
        }
        newObj[callbackRes] = numOdd
      }
        return newObj
    }

我得到了正确的解决方案:

{ 奇数:3,偶数:2 }

但是,我不太确定这是为什么?起初,我试图设置

        newObj[callbackRes] = numEv, numOdd

但是,这给了我这个解决方案:

{ odd: 2, even: 2 }

我发现尝试将对象分配给两个值只是将其分配给第一个 var。

为什么将 obj 值设置为 numOdd 返回的值与 numEv 不同?不应该是一样的,因为它正在经历相同的for循环吗?

【问题讨论】:

    标签: javascript for-loop object


    【解决方案1】:

    这是 Javascript 吗?你从来没有提到过。在 Javascript 中,逗号运算符分隔表达式。您的陈述将被解释为:

    (newObj[callbackRes] = numEv) , numOdd
    

    所以它分配第一个值,然后第二个值被丢弃。

    【讨论】:

    • 您好,感谢您的回答。它是在javascript中我应该澄清的。我通过弄乱 nums 数组发现我的代码甚至都不正确,我很幸运它返回了正确的解决方案。经过深思熟虑,我想出了正确的解决方案。
    • function countBy(array, callback){ let newObj = {} let numOdd = 0 let numEv = 0 for(let i = 0; i &lt; array.length; i++){ let callbackRes = callback(array[i]) newObj[callbackRes] = null if(callback(array[i]) === 'even'){ numEv++ newObj.even = numEv } else if(callback(array[i]) === 'odd'){ numOdd++ newObj.odd = numOdd } } return newObj } 这是正确的,对不起,我之前从未真正使用过堆栈溢出
    【解决方案2】:

    根据代码挑战的说法,javascript中的解决方案如下:

    function countBy(array, callback) {
      let newObj = {};
      for (let i = 0; i < array.length; i++) {
        let callbackRes = callback(array[i]);
        if (newObj[callbackRes] === undefined) {
          newObj[callbackRes] = 1;
        }
        else newObj[callbackRes]++;
      }
      return newObj;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 2022-09-07
      • 2020-05-21
      • 2017-09-15
      • 1970-01-01
      • 2015-01-17
      相关资源
      最近更新 更多