如何在 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;
}
我有一个功能,它工作得很好,但 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;
}