我在这里有一些不同的陈述,我希望你们告诉我,它们是否等价:
myApp.filter('myFilter', function() {
var result, i, sport, y, contains, league;
return function(sports, filterBy) {
if (angular.isUndefined(sports) || !filterBy) {
return sports;
}
filterBy = filterBy.toLowerCase();
result = [],
contains = function(haystack, needle) {
return haystack.toLowerCase().indexOf(needle) > -1;
};
for (i = 0; i < sports.length; i++) {
sport = sports[i];
if (contains(sport.name, filterBy)) {
result.push(sport);
continue;
} else {
for (y = 0; y < sport.leagues.length; y++) {
league = sport.leagues[y];
if (contains(league.name, filterBy)) {
result.push(sport);
break;
}
}
}
}
return result;
};
});现在有lodash:
myApp.filter('myFilter', function() {
var result, i, sport, y, contains, league;
return function(sports, filterBy) {
if (angular.isUndefined(sports) || !filterBy) {
return sports;
}
filterBy = filterBy.toLowerCase();
result = [],
contains = function(haystack, needle) {
return haystack.toLowerCase().indexOf(needle) > -1;
};
_.each(sports.length, function(sport) {
if (contains(sport.name, filterBy)) {
result.push(sport);
continue;
} else {
_.each(sport.leagues.length, function(league) {
if(contains(league.name, filterBy)) {
result.push(sport);
break;
}
});
}
});我只是想了解一下房客的逻辑。我在几乎纯正的JS中有这个功能,但是一旦我试图把它翻译成mistake,我的应用程序就会崩溃,所以我想知道哪里出错了?
这里有带有纯js函数的这个普朗克,在库部分中,您将看到我有underscore,因为我不知道为什么lodash没有加载,所以,我正在尝试的是:使用_.each而不是for loop将该函数转换为lodash函数。
发布于 2015-02-07 00:28:28
在这种情况下,你不会使用“每一个”。同样在“每个”中,你没有得到“继续”或“中断”。对我来说,我会使用“过滤器”来获得过滤的结果。所以代码应该如下所示:
var result = sports.filter(function(sport){
return (
contains(sport.name, filterBy)
|| (
sport.leagues && sport.leagues.some(function(league) {
return contains(league.name, filterBy)
})
)
)
})或下划线/下划线
var result = _.filter(sports, function(sport) {
return (
contains(sport.name, filterBy)
|| (
sport.leagues && _.some(sport.leagues, function(league) {
return contains(league.name, filterBy);
})
)
)
});https://stackoverflow.com/questions/28376724
复制相似问题