【发布时间】:2015-02-06 23:44:37
【问题描述】:
我在这里有一些不同的陈述,如果它们是等价的,我希望你告诉我:
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;
}
});
}
});
我只是想了解 lodash 的逻辑。我在几乎纯 JS 中具有该功能,但是一旦我尝试将其翻译为 lodash,我的应用程序就崩溃了,所以我想知道错误在哪里?
这里我有带有纯js函数的this Plnkr,在库部分你会看到我有underscore,因为我不知道为什么lodash没有加载,所以,我正在尝试的是:翻译使用 _.each 而不是 for loop 将该函数转换为 lodash 函数
【问题讨论】:
-
在两种情况下都从第一个参数中删除
.length -
一个
each和一个push到一个新的空数组几乎总是一个map- 无论是在原生 JS 还是在 lodash 中。 -
我没有得到你@BenjaminGruenbaum,你能给一个代码示例吗?
-
@NietzscheProgrammer plnkr.co/edit/3eemdNxpdKdJV5YNy9Lg?p=preview 没有下划线,将整个过滤方法减少到 ±8 行。
-
只是少了一个 .name...plnkr.co/edit/3eemdNxpdKdJV5YNy9Lg?p=preview
标签: javascript angularjs underscore.js lodash