我试图理解这一点:
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。
正确吗?
我试图理解这一点:function keyValue(array){var modeObj = {}; var i = 0; //创建modeObj array.forEach(function(num){if(!modeObj [num]){modeObj [num] = 0;} ...
只需在浏览器的开发人员工具中尝试此代码。
modeObj[num]++
将创建一个以num
作为键和NaN
的KVP(因为没有数字可以递增...如果密钥DID存在一个有效数字作为其值,则该数字将增加以1)作为值。