【问题标题】:forEach of object with value "0", is returning integer 1forEach 值为“0”的对象,返回整数 1
【发布时间】:2020-10-20 18:01:18
【问题描述】:

我有一个窗口/属性对象,我用 forEach 循环遍历它 - window.gaData["UA-MY-ID-NUMBER"].experiments 并包含两个键值。

以及位于对象中的数据:

{KGtpiL5KTAee3Dj6w7GRaA: "1", FPX0F0xuTaOzWE7b14odbg: "0"}

你可以看到,一个值显然是“0”。

我想遍历这个对象,只显示键值,如果值为 0。
但是,当我 forEach 循环遍历我的对象时,由于某种原因,我的“0”被转换为 1,我不知道为什么。

以下是我循环对象的方式:

Object.keys(window.gaData["UA-MY-ID-NUMBER"].experiments).forEach(function(key, value){
      if (window.gaData["UA-MY-ID-NUMBER"].experiments[key] === "0") {
      console.log('key, value: ', key, value);

      result += `
        <div>
          <p value="${key}">${key}:Experiement: ${key} is set to variant: ${value}</p>
          <button id="${key}">Switch variant</button>
        </div>
        `
      document.getElementById('variant-0-container').innerHTML = result;
    }
  });

下面是 console.log 进入我的浏览器的内容:

key, value:  FPX0F0xuTaOzWE7b14odbg 1
window.gaData["UA-MY-ID-NUMBER"].experiments
{KGtpiL5KTAee3Dj6w7GRaA: "1", FPX0F0xuTaOzWE7b14odbg: "0"}

我不知道为什么会这样。

任何指针?

我还尝试将 if 语句中的条件更改为 === 0== "0" 甚至 == 0,这给了我相同的输出。

【问题讨论】:

  • 您没有显示value 是如何声明/定义的。您的部分代码丢失。
  • @Greedo 实际上正确更新了它,为没有正确添加我的编码而道歉。不小心错过了。

标签: javascript string for-loop object foreach


【解决方案1】:

这是因为在Array.prototype.forEach() 中,第二个参数是循环的index,而不是您正在循环的对象的值。 更多关于documentation

window.gaData = {"UA-MY-ID-NUMBER": {}};

window.gaData["UA-MY-ID-NUMBER"].experiments = {KGtpiL5KTAee3Dj6w7GRaA: "1", FPX0F0xuTaOzWE7b14odbg: "0"};


Object.keys(window.gaData["UA-MY-ID-NUMBER"].experiments).forEach(function(key){
      var value = window.gaData["UA-MY-ID-NUMBER"].experiments[key]
      if (value === "0") {
      console.log('key, value: ', key, value);
    }
  });

【讨论】:

  • 请不要对 OP 的代码做任何假设。让他们更新他们的问题。
  • 非常感谢@greedo!我知道答案很简单/显而易见,但谢谢。我会好好阅读以进一步了解这个问题!再次感谢 - 这有效!
  • @FelixKling 我知道不是最好的,但是当我尝试分析代码时是唯一合理的原因
猜你喜欢
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多