【发布时间】:2020-04-07 16:33:17
【问题描述】:
我试图理解这一点:
function keyValue(array) {
var modeObj = {};
var i=0;
// create modeObj
array.forEach(function(num){
if (!modeObj[num]) {
modeObj[num] = 0;
}
modeObj[num]++;
console.log("1 list object keys "+Object.keys(modeObj));
console.log("2 list object value "+Object.values(modeObj));
i++;
console.log("3 iteration num "+i);
});
}
当遍历数组 [1,4,5,4,6,1] 时,结果如下:
1 list object keys 1
2 list object value 1
3 iteration num 1
1 list object keys 1,4
2 list object value 1,1
3 iteration num 2
1 list object keys 1,4,52 list object value 1,1,1
3 iteration num 31 list object keys 1,4,5
2 list object value 1,2,1
3 iteration num 4
1 list object keys 1,4,5,62 list object value 1,2,1,1
3 iteration num 5
1 list object keys 1,4,5,6
2 list object value 2,2,1,1
3 iteration num 6
如果在文献中发现“Object.keys 方法用于返回简单数组的可枚举属性”。从数组 [1,4,5,4,6,1] 中可以清楚地看出,键 1 和键 4 在数组中出现了两次。如果我们检查所有对应键的值,我们可以看到键值表示部分键的出现次数。键 [1,4,5,6],值 - 2,2,1,1。
在第一行中,声明了新对象,然后是通过数组的迭代,该数组被发送到函数“keyValue()”中。数组 [1,4,5,4,6,1]。
通过表达式“var modeObj = {};”只声明了空对象。
if(!modObj[element]) 检查迭代中对象的键(元素)是否未定义或具有某些值。如果键不存在,则值 0 将作为值添加到迭代中的当前键。稍后通过表达式“modeObj[num]++;”将其变为值1
我不确定的是我对表达式 modObj[element]++; 的解释,我相信它可以分两个阶段来解释:
第一步:modObj[element]= modObj[element],
第二步:然后modObj[element]=modObj[element]+1
这意味着 modObj[element] 将增加特定键的值,如果键是唯一的,则将仅添加 1,这将表示该键的出现次数,如果是键的第二次或任何其他出现将在现有出现次数上加 1。
对吗?
【问题讨论】:
标签: javascript arrays object foreach