【问题标题】:for in loop to find propertyfor in 循环查找属性
【发布时间】:2013-12-19 04:07:57
【问题描述】:

我创建了一个 for in 循环,并试图理解为什么当我运行它时,控制台会记录 2x“我们知道了”。似乎如果我在循环中,您只希望它在找到该属性一次的情况下记录一次。

我也是 JS 新手,所以如果您对我的格式有任何反馈,我们将不胜感激。节日快乐!

var obj = {
  company: 'planters',
  peanuts: 'plain'
};

for (var key in obj) {
  if (obj.hasOwnProperty('peanuts')) {
    console.log('We got it');
  } else {
    console.log("We cant find it");
  }
};

【问题讨论】:

  • 您没有对 if 语句中的当前密钥执行任何操作。
  • 换一种说法,你不想要for/in,你实际上想要Object.keys(obj).forEach(...)。 for/in 通常要求您首先执行if (obj.hasOwnProperty(key)) 检查以查看您是在处理本地属性还是继承属性。 Object.keys 不会发生这种要求(和问题)

标签: javascript for-in-loop console.log


【解决方案1】:

发生这种情况的原因是您将其循环 2 次迭代(即对象的长度)并查看对象是否具有属性 peanuts,这在两种情况下都是正确的。

【讨论】:

    【解决方案2】:

    for 循环是不必要的。你没有使用key。这仅相当于将 for 循环的主体运行对象(和父对象)中键的次数。

    试试

    for (var key in obj) {
      if (obj.hasOwnProperty(key)) {  // you mean this
        console.log('We got ', key);
      } else {
        console.log("We cant find it");
      }
    };
    

    更好地了解这里发生了什么。

    【讨论】:

      【解决方案3】:

      如果您要查找特定密钥,则必须将其与 key 进行比较。

      var found = false;
      for (var key in obj) {
          if (obj.hasOwnProperty(key) && key == 'peanuts') {
              console.log('We got it');
              found = true;
              break;
          }
      }
      if (!found) {
          console.log("We can't find it");
      }
      

      【讨论】:

        猜你喜欢
        • 2012-11-18
        • 2015-12-23
        • 1970-01-01
        • 2018-01-14
        • 2020-04-13
        • 2014-02-10
        • 1970-01-01
        • 1970-01-01
        • 2014-10-11
        相关资源
        最近更新 更多