【问题标题】:for the first time this line console.log("alphabet--->" + alphabet); is printing undefined第一次这一行 console.log("alphabet--->" + alphabet);正在打印未定义
【发布时间】:2018-09-25 06:54:15
【问题描述】:
  • 我是 js 新手。
  • 我正在分析一个简单的代码。
  • 不确定它是如何工作的。
  • 第一次使用这一行 console.log("alphabet--->" + alphabet);正在打印未定义的计数[字母]--->未定义
  • 你能告诉我为什么它的打印未定义。
  • 第二次在这一行打印 3 console.log(counts[alphabet] + 1);
  • 但它应该从 1+1 开始打印两个。
  • 你们能否解释一下,以便我以后自己修复它。
  • 在下面提供我的代码更改。
var str = "aaabbccccddd";
var arr = str.split("");
var counts = {};
for (var i = 0; i < arr.length; i++) {
    var alphabet = arr[i];
    console.log("alphabet--->" + alphabet);
        console.log("counts[alphabet]--->" + counts[alphabet]);

    if (counts[alphabet]) 
        {
            counts[alphabet] = counts[alphabet] + 1;
            console.log("inside if--->");
            //console.log("inside if--->" + counts[alphabet] + 1);
            console.log(counts[alphabet] + 1);
        }
    else
    { 
        counts[alphabet] = 1;
        console.log("inside else--->");
        console.log(counts[alphabet]);

        //console.log("inside else--->" + counts[alphabet] + 1);
    }
    //counts[alphabet] = counts[alphabet] ? counts[alphabet] + 1 : 1;
}

console.log('a: ' + counts['a'] + '\n b: ' + counts['b'] + '\n c: ' + counts['c'] + '\n d: ' + counts['d'])

输出

alphabet--->a
  counts[alphabet]--->undefined
  inside else--->
  1
  alphabet--->a
  counts[alphabet]--->1
  inside if--->
  3
  alphabet--->a
  counts[alphabet]--->2
  inside if--->
  4
  alphabet--->b
  counts[alphabet]--->undefined
  inside else--->
  1
  alphabet--->b
  counts[alphabet]--->1
  inside if--->
  3
  alphabet--->c
  counts[alphabet]--->undefined
  inside else--->
  1
  alphabet--->c
  counts[alphabet]--->1
  inside if--->
  3
  alphabet--->c
  counts[alphabet]--->2
  inside if--->
  4
  alphabet--->c
  counts[alphabet]--->3
  inside if--->
  5
  alphabet--->d
  counts[alphabet]--->undefined
  inside else--->
  1
  alphabet--->d
  counts[alphabet]--->1
  inside if--->
  3
  alphabet--->d
  counts[alphabet]--->2
  inside if--->
  4
  a: 3
 b: 2
 c: 4
 d: 3

【问题讨论】:

  • 在您的console.log("counts[alphabet]---&gt;" + counts[alphabet]) 中,alphabet 之前设置为arr[i];,所以您实际上是在说console.log("counts[alphabet]---&gt;" + counts[arr[i]]),它在计数中还不存在,所以它是未定义的
  • @ᔕᖺᘎᕊ 嘿,谢谢您的回复...您能给 cmets 带来难以理解的内容吗...请

标签: javascript jquery html function hash


【解决方案1】:

你的代码很完美!它最终会为您提供正确的结果。 console.logs() 中的一个只是一个小错误。

让我们来看看到底发生了什么。

设置变量。

var str = "aaabbccccddd";
var arr = str.split("");
var counts = {};

循环arr,等于['a','a','a','b','b','c','c','c','c','d','d','d']

for (var i = 0; i < arr.length; i++) {

第一次进入循环。将alphabet 设置为arr[i],即arr[0],即'a'

var alphabet = arr[i];

counts 此时仍只是一个空对象 ({})。这意味着counts[alphabet]counts['a'] 是'undefined'。在 JavaScript 中,if(undefined)if(false) 相同,所以我们跳转到 else 块。

if (counts[alphabet]) 

在 else 块中,我们将counts[alphabet](即counts['a'])设置为1。因此counts 变为{'a': 1}

counts[alphabet] = 1;

除了几个console.log()s 之外,循环内没有其他事情可做。所以i0 变为1(因为i++)。 i &lt; arr.length1 &lt; 12 仍然是 true 所以我们将再次遍历循环体。

for (var i = 0; i < arr.length; i++) {

第二次进入循环。将alphabet 设置为arr[i],即arr[1],即'a'

var alphabet = arr[i];

和以前一样,counts[alphabet]counts['a'],但现在 counts['a'] 有一个值。在最后一个循环结束时,counts['a'] 被设置为 1。在 JavaScript 中,0 以外的任何数字都是“真实的”。这次我们不会跳转到 else 块。我们将执行 if 块。

if (counts[alphabet]) 

我们增加counts[alphabet],即counts['a']。之前是1。现在是2

counts[alphabet] = counts[alphabet] + 1;

现在我们来到给出意外输出的那一行。根据上述行,counts[alphabet]counts['a'] 现在是 2。当然,2 + 13。此行将输出3

console.log(counts[alphabet] + 1);

如果我理解您要执行的操作,则无需在此处添加 1。删除+ 1,您应该会得到预期的输出。

console.log(counts[alphabet]);

【讨论】:

  • 嘿,谢谢您的回复...您能给 cmets 带来难以理解的内容吗...请
  • 是的,我已经用更多细节重写了答案。让我知道这是否有帮助。
  • hey counts empty object is become like this {'a': 1} 这就是哈希的工作原理...你能简单解释一下...以便我更好地理解
  • 这里有一篇文章简单地解释了 JavaScript 对象是如何工作的。 developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/…
猜你喜欢
  • 2016-09-15
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
相关资源
最近更新 更多