1

我有一个功能,它工作得很好,但代码检查表明这样做是不好的做法。我知道它甚至看起来不安全,但我无法想出另一种更好的方法。

    function getCount(i) {

        var iCount = iCount || 0;

        for (var item in this.items) {
            for (var level1 in this.items[item]) {
                for (var level2 in this.items[item][level1]) {
                    for (var level3 in this.items[item][level1][level2]) {
                        if (this.items[item][level1][level2][level3] == i) {
                            iCount++;
                        }
                    }
                }
            }
        }
        return iCount;
    }

在 Icycool 的建议之后,我想出了一些更容易接受的方法。我尝试使用 forEach 循环,但没有成功,所以我决定使用 fori。虽然它并不完美,但它现在可以做到:

    function getCount(i) {
        var iCount = iCount || 0;
            for (var y = 0; y < this.items["content"].length; y++) {
                if (this.items["content"][y]["custom_object"]["id"] === i) {
                    iCount++;
                }
            }
        return iCount;
    }
4

1 回答 1

1

您可以使用递归函数对其进行简化。

function getCount(i, items) {
  var count = 0;

  items.forEach(function(item) {
    if (item.isArray) count += getCount(i, item);
    else if (item == i) count++;
  });

  return count;
}
于 2017-07-05T10:07:40.087 回答