【问题标题】:Count and loop through JSON object of arrays计数并循环遍历数组的 JSON 对象
【发布时间】:2019-12-17 21:36:33
【问题描述】:

当我想遍历 JSON 对象数组时遇到问题。

问题如:

  • 它只计算两个(我假设是因为它们是 Object.keys)而且我有两个键。
  • 只有一个值的循环

我的代码:

var codes = require('./nl.json');
for (var i = 0, l = Object.keys(codes).length; i <= l; i++) {
    console.log(l) ;
    var areaCodeTest = codes.netherlands[i].areaCode;
    var areaNameTest = codes.netherlands[i].areaName;

    it("Search for postal code ", function(){
        var postCode = element(by.id("imysearchstring"));
        postCode.click(); 
        browser.sleep(1000); 
        console.log(areaCodeTest);
        postCode.clear().sendKeys(areaCodeTest);
        browser.sleep(1000);
        console.log("Typed " + areaCodeTest);
    });
}

我的 Json(简短示例):

{
"netherlands": [
  {
    "areaCode": 9401,
    "areaName": "Assen"
  },
  {
    "areaCode": 9402,
    "areaName": "Assen"
  },
  {
    "areaCode": 9403,
    "areaName": "Assen"
  }
 ]
}

我看过以下答案:

Size of ObjectLength of Json

我试过了:

(var i = 0, l = Object.keys(codes).length; i <= l; i++)

(var i = 0, l = Object.keys(codes.netherlands[0]).length; i <= l; i++)

for (var i = 0, l = codes.netherlands.length; i <= l; i++) // uses last areaCode in json file and only loop with that number. It does not start from top.

图片: some of my outputs

预期: 我想要的是计算 JSON 中的项目数量(不是键/值)

遍历所有数据并将它们分配给var areaCodeTest = codes.netherlands[i].areaCode;var areaNameTest = codes.netherlands[i].areaName;

【问题讨论】:

  • 你只想要数组的长度吗?如果是这样,在你的情况下应该是codes.netherlands.length
  • @ShakedDahan 然后仅使用一个 areaCode (8245) 循环 - JSON 文件中的最后一条记录。我希望它从顶部开始并遍历每个对象并使用 areaName 和 areaCode
  • 为什么不使用更舒适的循环? Object.keys(codes).forEach(function (item) { console.log(item); // key console.log(codes[areaCode]; // value });

标签: javascript json protractor


【解决方案1】:

我通过以下方式让它工作:

var codes = require('./nl.json');

codes.forEach((item) => {
    var areaCodeTest = item.areaCode;
    var areaNameTest = item.areaName;

    it("and search for postal code ", function(){
        var postCode = element(by.id("imysearchstring"));
        postCode.click(); 
        console.log(areaCodeTest);
        postCode.clear().sendKeys(areaCodeTest);
        browser.sleep(1000);
        console.log("Typed " + areaCodeTest);
    });
}

我不是 100% 的 =&gt; 在 foreach 附近的意思,但我目前正在研究为什么我的代码有效。如果您知道,请发表评论,以便其他开发人员也可以学习。

这让我想到了模因“不确定代码为什么不起作用/不确定代码为什么起作用”

【解决方案2】:

您需要访问循环中的实际密钥才能访问codes[key]

for() 循环的简化版本,其中包含对象键的存储变量或使用 for in 循环

const keys = Object.keys(codes)

for (let i = 0; i < keys.length; i++) {
  // current object key and value of that property in main object
  const key = keys[i], arr = codes[key];
  console.log(`key = ${key}, length= ${arr.length}`)

  // do another loop here for `arr` if needed
}

// OR using `for in`
for (let key in codes) {
  console.log(`key = ${key}, length= ${codes[key].length}`)
}
<script>
  const codes = {
    "netherlands": [{
        "areaCode": 9401,
        "areaName": "Assen"
      },
      {
        "areaCode": 9402,
        "areaName": "Assen"
      },
      {
        "areaCode": 9403,
        "areaName": "Assen"
      }
    ]
  }
</script>

【讨论】:

    【解决方案3】:

    试试这个我给你一个样本

    const object1 = {
      a: 'somestring',
      b: 42,
      c: false
    };
    
    var length = (Object.keys(object1).length);
    

    请参考此链接:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

    【讨论】:

      猜你喜欢
      • 2016-07-28
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 2017-08-16
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多