首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纯JS对房客

问纯JS对房客
EN

Stack Overflow用户
提问于 2015-02-06 23:44:37
回答 1查看 782关注 0票数 0

我在这里有一些不同的陈述,我希望你们告诉我,它们是否等价:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-07 00:28:28

在这种情况下,你不会使用“每一个”。同样在“每个”中,你没有得到“继续”或“中断”。对我来说,我会使用“过滤器”来获得过滤的结果。所以代码应该如下所示:

代码语言:javascript
复制
var result = sports.filter(function(sport){
  return (
      contains(sport.name, filterBy) 
    || (
      sport.leagues && sport.leagues.some(function(league) { 
        return contains(league.name, filterBy) 
      })
    )
  )
})

或下划线/下划线

代码语言:javascript
复制
var result = _.filter(sports, function(sport) {
  return (
      contains(sport.name, filterBy) 
    || (
      sport.leagues && _.some(sport.leagues, function(league) { 
        return contains(league.name, filterBy);
      })
    )
  )
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28376724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档