【问题标题】:filter objects matching details过滤匹配细节的对象
【发布时间】:2014-05-07 21:28:06
【问题描述】:

功能运行良好,它们按条形码和制造商过滤库存。我想让它像默认的 angularjs 过滤一样。如果我选择制造商 - LG 和条形码 - 112,如果它们不匹配,那么它不应该显示任何内容。

但现在它单独显示,当我点击过滤器功能时,它会在 filter2 功能过滤器制造商上过滤条形码

$scope.filter = function(barcode) {
            var filtered = [];
            for(var i = 0; i < $scope.inventories.length; i++){
                if($scope.inventories[i].barcode == barcode){
                    filtered.push($scope.inventories[i]);
                } 
            }
            $scope.filtered_inventories = filtered;
        };

        $scope.filter2 = function(manufacturer) {
            var filtered = [];
            for(var i = 0; i < $scope.inventories.length; i++){
                if($scope.inventories[i].manufacturer == manufacturer){
                    filtered.push($scope.inventories[i]);
                } 
            }
            $scope.filtered_inventories = filtered;
        };

【问题讨论】:

    标签: javascript django angularjs


    【解决方案1】:

    试试这个

        $scope.filter = function (barcode, manufacturer) {
            var filtered = [];
            for(var i = 0; i < $scope.inventories.length; i++){
                if($scope.inventories[i].barcode == barcode || $scope.inventories[i].manufacturer == manufacturer){
                    filtered.push($scope.inventories[i]);
                } 
            }
            $scope.filtered_inventories = filtered;
        };
    

    【讨论】:

      【解决方案2】:

      您可以创建更通用的过滤方式:

      $scope.filterByBarcode = function(list, key, value) {
          return list.filter(function(item){
              return item[key] === value;
          });
      };
      

      当您过滤时,您可以调用:

      $scope.filtered_inventories = $scope.filter($scope.filter($scope.inventories, 'barcode', 112), 'manufacturer', 'LG')
      

      但是为了简化你可以创建一个函数:

      $scope.filterByBarcodeAndManufacturer = function(barcode, manufacturer) {
          $scope.filtered_inventories = 
              $scope.filter($scope.filter($scope.inventories, 'barcode', barcode), 'manufacturer', manufacturer);  
      }
      

      【讨论】:

      • $scope.filter($scope.filter($scope.inventories 看起来很奇怪:D
      • 过滤的for循环也很奇怪。你也可以做一个过滤器 return item.barcode = B && item.manufacturer = M 但我更喜欢链接它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 2017-06-21
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      相关资源
      最近更新 更多