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
答案 0 :(得分:2)
您的代码非常完美!它最终会给你正确的结果。其中一个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()
之外,循环内部没有别的事情可做。因此,i
从0
更改为1
(因为i++
)。 i < arr.length
1 < 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
+ 1
是3
。此行将输出3
。
console.log(counts[alphabet] + 1);
如果我理解你要做什么,就不需要在这里添加1。删除+ 1
,您应该得到预期的输出。
console.log(counts[alphabet]);