【问题标题】:Using Lodash _.map and Typescript to create new column for filtering使用 Lodash _.map 和 Typescript 创建新列进行过滤
【发布时间】:2016-02-24 23:10:37
【问题描述】:

在我的控制器中,我的代码可以很好地过滤,但我想创建一个新字段,它将两个字段连接起来,用于 html 中的 Angular 过滤器。这就是我所拥有的不起作用..这可能吗?

            private filterByColumns: string = ""; 

            getData = (): void => {
                var vm = this;
                this.carHopService.getDetails({ id: this.$state.params["id"], type: this.$state.params["type"] }).then(
                    (data: any) => {
                        vm.primaryCarHopData = _.filter(data.carHopList, {
                            carHopType: "Primary"
                        });

--->                **vm.primaryCarHopData = _.map(data.carHopList, {
                            vm.filterByColumns=fullName + " " + age

                        });**
                    });
            };

【问题讨论】:

    标签: angularjs typescript lodash


    【解决方案1】:

    地图不是这样工作的。在回调函数中,需要返回一些东西:

    _.map([0,1,2], (x) => x + 1)
    > [1,2,3]
    // old syntax
    _.map([0,1,2], function (x) { return x + 1 })
    > [1,2,3]
    

    您可以简单地将_.map 替换为_.forEach,您将在data.carHopList 中获得映射数据。


    澄清:

    我不善言辞,所以让我在这里为forEachmap 提供非常简单的实现:

    // these functions do not mock lodash counterparts 100%
    // as lodash fns can work with objects too
    // and they have some shortcuts, see docs
    
    function forEach(arr, callback) {
      for(var i = 0; i < arr.length; i++) {
        callback(arr[i], i);
      }
      return arr;
    }
    
    function map(arr, callback) {
      var newArr = [];
      for(var i = 0; i < arr.length; i++) {
        newArr[i] = callback(arr[i], i);
      }
      return newArr;
    }
    

    【讨论】:

    • 最后一句话对我来说似乎不正确。你能再澄清一点吗? _.forEach 不是 _.map 的替代品,除非您正在改变源数组。
    【解决方案2】:

    有人把我引向地图的方向。我最终做的是通过将它添加到控制器来使用 Angular:

        filterTextByCols = (row) => {
            return (angular.lowercase(row.fullName).indexOf(angular.lowercase(this.filterQuery) || '') !== -1 ||
                angular.lowercase(row.birthDate).indexOf(angular.lowercase(this.filterQuery) || '') !== -1);
        }
    

    然后在过滤器中使用 filterTextByCols:

    <div ng-repeat="person in vm.persons | orderBy:sortType:sortReverse | filter: vm.filterTextByCols">
    

    【讨论】:

      猜你喜欢
      • 2018-09-27
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多