如何在 AngularJS 中重写没有通用对象注入接收器的函数?

How to re-write function without generic object injection sink in AngularJS?

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

    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;
    }

你可以用递归函数简化它。

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;
}