【问题标题】:Clarification on For/Over Loop with Conditionals对带有条件的 For/Over 循环的说明
【发布时间】:2020-12-26 09:53:35
【问题描述】:

阅读 O'Reilly 的 JS Definitive Guide 并发现了这段代码:

let freq = {};
for (let item of "alabama") {
   if (freq[item]) {
     freq[item]++;
  } else {
     freq[item] = 1; 
 } 
}

只想复习一些语法和含义:

  1. 将空对象分配给“freq”变量
  2. 在给定的字符串上运行 for/of 循环
  3. If 语句检查 freq[item] 是否返回 true .. 我得到了那部分,但什么会触发该真实值?
  4. 那么如何触发一个虚假值来产生一个值 1?

提前致谢!

【问题讨论】:

标签: javascript if-statement for-of-loop


【解决方案1】:

在javascript中以下是错误的 "",false,0,undefined,null.. 在你的情况下 freq 是一个空对象

freq ={}

在循环的第一次迭代中

item = 'a'

freq[item] 将未定义 如果freq[item] 将是false 所以在其他freq[item] = 1 即。 freq={a:1} 第二次迭代的方法相同freq={a:1,l:1} 第三次迭代

item = 'a'

freq[item] 将是 1 如果freq[item] 为真并递增freq={a:2,l:1}

【讨论】:

    【解决方案2】:

    第一次找到不在对象中的字母时,它将返回 undefined

    1) a
        freq['a'] will be undefined 
        therefore the code will set a 1 to it 
        freq['a'] = 1
    2) l will go through the same steps as #1
    3) a 
        freq['a'] will be 1 
        so it's truthy therfore we add 1 to it 
        freg['a'] ++; which will make it 2
    

    然后你可以按照相同的模式找出其余的

    【讨论】:

    • 知道了!谢谢爱德华。只是最初的设置让我遇到了编码障碍。
    • @greenpepper38 当然可以,很高兴我能帮上忙
    • 我猜你是在尝试创建一个字母列表以及每个字母出现多少次正确时将 freq 分配给空括号?
    • 不知道你所说的“freq to empty brackets”是什么意思
    • 您想在尝试添加任何键之前创建一个空对象(不是列表)。一旦你这样做了,那么对新键的任何引用都将是未定义的,这就是为什么 if 语句会知道你何时加 1,或将计数初始化为 1。一旦你这样做,那么你将拥有所有的计数唯一键引用的一种很好的可用方式
    【解决方案3】:

    首先,请记住,当使用for..of 迭代字符串时,为每个循环声明的项(您已将其命名为item)是字符串的每个字符。

    由于对象一开始是空的,freq[item] 最初将是 undefined。例如,在第一次迭代时,{}['a']undefined,这是错误的,因此输入了 else

    freq['a'] = 1; 
    

    在随后的迭代中,当找到字符 a 时,a 属性存在于对象上,因此输入 if,增加该属性值:

    freq['a']++;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      相关资源
      最近更新 更多