【问题标题】:iterating through object elements javascript遍历对象元素javascript
【发布时间】: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


    【解决方案1】:

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

    modeObj[num]++ 将创建一个 KVP,其中 num 作为键,NaN(因为那里没有可增加的数字...如果键确实存在且其值为有效数字,那么该数字将增加 1) 作为值。

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

    【讨论】:

      猜你喜欢
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 2013-12-18
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多