首页 > 解决方案 > 遍历对象元素javascript

问题描述

我试图理解这一点:

  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。

那是对的吗?

标签: javascriptarraysobjectforeach

解决方案


只需在浏览器的开发人员工具中尝试此代码即可。

modeObj[num]++创建一个 KVPnum作为键和NaN(因为那里没有数字可以增加......如果键 DID 存在并以有效数字作为其值,那么该数字将增加 1)作为值。

所以modeObj[1]导致modeObj{1: NaN}


推荐阅读