【问题标题】:how to splice the array based on paritcular value using angularjs如何使用angularjs根据特定值拼接数组
【发布时间】:2017-05-22 09:46:12
【问题描述】:

我正在使用angularjs,并且我在范围内有一个数组。我需要删除范围数组中No=1 中有大量数据的对象。我需要删除特定的值,称为“1”。

请帮助如何实现这一点。

    var data=[
      {
         "No":1,
        "PatientState": "AK",
        "DispenseMonth": "7/1/2016" 

      },
      {
        "No":2,
        "PatientState": "AK",
        "DispenseMonth": "8/1/2016" 
      },
      {
         "No":1,
        "PatientState": "AK",
        "DispenseMonth": "9/1/2016" 
      },
      {
        "No":1,
        "PatientState": "AK",
        "DispenseMonth": "10/1/2016" 
      },
      {
        "No":4,
        "PatientState": "AK",
        "DispenseMonth": "11/1/2016" 
      },
      {
        "No":1,
        "PatientState": "AK",
        "DispenseMonth": "2/1/2017" 
      },
      {
         "No":5,
        "PatientState": "AK",
        "DispenseMonth": "3/1/2017" 
      }
        ]

        $scope.StateInformations =data;

【问题讨论】:

    标签: javascript angularjs arrays


    【解决方案1】:

    使用Array.filter过滤您想要的内容并将过滤结果设置回$scope. StateInformations

    UPD:

    根据您对我的回答,我判断您可能需要一个自定义过滤器来获得您想要的东西,您也可以将Array.filter 用于自定义过滤器。

    参考下面的代码 sn-p 和这个 plunker demo

    var app = angular.module("app", []);
    app.controller("myCtrl", function($scope) {
      $scope.conditions = [];
      $scope.options = [{
        check: false,
        value: 1
      }, {
        check: false,
        value: 2
      }, {
        check: false,
        value: 3
      }];
      $scope.data = [{
          "No": 1,
          "PatientState": "AK",
          "DispenseMonth": "7/1/2016"
        },
        {
          "No": 2,
          "PatientState": "AK",
          "DispenseMonth": "8/1/2016"
        },
        {
          "No": 1,
          "PatientState": "AK",
          "DispenseMonth": "9/1/2016"
        },
        {
          "No": 1,
          "PatientState": "AK",
          "DispenseMonth": "10/1/2016"
        },
        {
          "No": 4,
          "PatientState": "AK",
          "DispenseMonth": "11/1/2016"
        },
        {
          "No": 1,
          "PatientState": "AK",
          "DispenseMonth": "2/1/2017"
        },
        {
          "No": 5,
          "PatientState": "AK",
          "DispenseMonth": "3/1/2017"
        }
      ];
    
      $scope.setFilterCondition = function(option) {
        if (option.checked) {
          $scope.conditions.push(option.value);
        } else {
          $scope.conditions.splice($scope.conditions.indexOf(option.value), 1);
        }
      };
    });
    app.filter("sampleFilter", function() {
      return function(input, condition) {
        if (!input) { return []; }
        if (!condition || condition.length === 0)  { return input; }
    
        return input.filter(function(item) {
          for (var i = 0; i < condition.length; i++) {
            if (item.No === condition[i]) {
              return true;
            }
          }
          return false;
        });
      };
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
    <div ng-app="app" ng-controller="myCtrl">
      <div ng-repeat="option in options">
        <label>
          <input type="checkbox" ng-model="option.checked" ng-change="setFilterCondition(option)">
          {{option.value}}
        </label>
      </div>
      <br>
      <div ng-repeat="item in data | sampleFilter: conditions">
        <span>{{item.No}}</span> -
        <span>{{item.PatientState}}</span> -
        <span>{{item.DispenseMonth}}</span>
      </div>
    </div>

    【讨论】:

    • 我有复选框 1 ,2 ,3 就像取消选中第一个我需要过滤 NO:1 两个取消选中意味着过滤 NO:2
    • 了解@pengyy,否则我会创建一个很容易理解的小提琴
    • @jose 您应该立即在您的问题中发布您的所有要求。
    • @jose 我猜你可能需要一个自定义过滤器。等一下。
    • @jose 查看更新后的示例。我记得以前回答过类似的问题。但没有找到。没关系,我只是做了一个新的例子。 :)
    猜你喜欢
    • 2014-04-21
    • 2012-03-25
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多