【问题标题】:Enumerate through an external JSON with javascript使用 javascript 枚举外部 JSON
【发布时间】:2015-11-05 20:00:01
【问题描述】:

我目前使用此代码来遍历 .json 文件:

for (f = 0; f < forum.length; f++) {
            end = columnArray.length - 1;
            object = forum[f];
            for (property in object)
                    {
                    value = object[property];
                    if (property === columnArray[end]) {
                        tableRowData = "<td>" + value + "</td></tr>";
                    } else {
                        tableRowData = "<td>" + value + "</td>";
                    }
                    tableRowData2 += tableRowData;
                    tableRowData = "";
                }
            finalTableData = "<tr>" + tableRowData2;
            finalTableData2 += finalTableData;
            tableRowData2 = "";
        }

JSLint 不喜欢使用 for/in 循环遍历数组的想法。正在尝试将其编写为标准:

for (i = 0; i < forum.length; i++) {}

但是卡住了。这可能很简单,但由于某种原因我看不出逻辑应该是什么。

谢谢。

【问题讨论】:

  • 不知道你在问什么
  • 我想在不使用 for/in 循环的情况下遍历 json 文件。
  • 如果关于for (property in object),则使用for (var i = 0; i &lt; object.length; i++) {object[i]}
  • 你能举一个你的 JSON 文件的例子吗?
  • 我想确保在不知道密钥是什么的情况下遍历文件但仍然能够获取值

标签: javascript arrays json for-loop


【解决方案1】:

我看到 JSLint 可能会抱怨两件事,所以我会同时回答它们。

对于外层循环,JSLint 不喜欢 ++ 系列结构(包括 -- 变体),因为它们可能对空格敏感或缺少空格。你的外循环可以重写为:

for (i = 0; i < forum.length; i += 1) {}

...JSLint 不应该抱怨这一点。

对于内部循环,JSLint 希望您在 for-in 循环中添加一个 hasOwnProperty 保护。这可能会像这样工作......

for (property in object) {
    if (object.hasOwnProperty(property)) {
        value = object[property];
        if (property === columnArray[end]) {
            tableRowData = "<td>" + value + "</td></tr>";
        } else {
            tableRowData = "<td>" + value + "</td>";
        }
        tableRowData2 += tableRowData;
        tableRowData = "";
    }
}

请注意,我已将循环体包装在Object.prototype.hasOwnProperty() 上的 if-check 中(由于数组是对象,它们可以用作方法调用)。这可以防止来自原型链中的属性的意外后果,否则这些属性可能会被枚举。

【讨论】:

  • JSLint 仍然不喜欢 .hasOwnProperty。仍然说“对变量'属性'不利”。另外,忘记了++和--。我正在将 ++ 更改为 +=。
  • 这是一个不同的问题。您在哪里将property 定义为变量?
  • 所有变量都定义在文档的顶部。我看到的是 JSLint 不希望您使用 for/in 循环,因为它们可能会导致问题。添加 .hasOwnProperty(显然是根据 ES6)使得使用 for/in 循环变得可以接受。在另一篇文章中:“你会让人告诉你使用 for-in,但这不是 for-in 的用途。for-in 循环遍历对象的可枚举属性,而不是数组的索引。直到 ES5 , 不保证顺序;从 ES6 开始,保证顺序(通过 [[OwnPropertyKeys]]、[[Enumerate]] 和 for-in/for-of 的定义)。”
猜你喜欢
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 2011-03-22
  • 2012-03-20
  • 1970-01-01
相关资源
最近更新 更多