programing

속성을 기준으로 개체 각도 필터링

sourcejob 2023. 3. 20. 23:11
반응형

속성을 기준으로 개체 각도 필터링

다음과 같은 유사한 구조(서비스로부터 데이터가 반환되는 방식)에 있는 일련의 개체 속성을 가진 개체가 있습니다.

{
  "1": {
    "type": "foo",
    "name": "blah"
  },
  "2": {
    "type": "bar"
  },
  "3": {
    "type": "foo"
  },
  "4": {
    "type": "baz"
  },
  "5": {
    "type": "test"
  }
}

ng-repeat을 실행하면 다음과 같은5개의 오브젝트를 모두 반복할 수 있습니다.

<div ng-repeat="item in items">{{item.type}}</div>

다만, 정말로 하고 싶은 것은, 「foo」타입이 아닌 항목, 즉 5가 아닌 3의 반복에 대해서만 반복하고 싶다고 생각하고 있습니다.필터가 어떻게든 이용될 수 있다는 것은 알고 있습니다만, 그 방법에 대해서는 잘 모르겠습니다.다음을 시도했습니다.

<div ng-repeat="item in items| !filter:{type:'foo'}">{{item.type}}</div>

근데 이거 안 돼.실제로, 2개의 오브젝트(아이템이 있는 오브젝트)로 제한하기 위해서라도, 이하를 실시합니다.type==="foo")는 작동하지 않고 5회 반복합니다.

<div ng-repeat="item in items| filter:{type:'foo'}">{{item.type}}</div>

기본적으로 다음과 같은 작업을 수행하고자 합니다.

<div ng-repeat="item in items" ng-if="item.type !=='foo'>{{item.type}}</div>

하지만, 나는 그것이 효과가 없다는 것을 안다.

답변이 늦었지만 도움이 될 수 있습니다.

지정된 개체의 손자 또는 더 깊은 개체에 대해 필터링하려는 경우 개체 계층을 계속 구축할 수 있습니다.예를 들어 'thing.properties'를 필터링하는 경우.title'은 다음 작업을 수행할 수 있습니다.

<div ng-repeat="thing in things | filter: { properties: { title: title_filter } }">

필터 개체에 추가하는 것만으로 개체의 여러 속성을 필터링할 수도 있습니다.

<div ng-repeat="thing in things | filter: { properties: { title: title_filter, id: id_filter } }">

'not equals' 구문이 조금 다릅니다. 다음을 시도해 보십시오.

<div ng-repeat="thing in things | filter: { properties: { title: '!' + title_filter } }">

필터는 어레이에서 작동하지만 개체 리터럴이 있습니다.

따라서 개체 리터럴을 배열로 변환하거나 개체 리터럴을 사용하는 것보다 고유한 필터를 만들 수 있습니다.

이러한 인덱스 값이 필요하지 않은 경우 어레이로 변환하는 것이 가장 좋은 방법입니다(이 어레이는 다음과 같이 동작합니다.http://jsfiddle.net/NqA8d/3/) :

$scope.items = [{
    "type": "foo",
        "name": "blah"
}, {
    "type": "bar"
}, {
    "type": "foo"
}, {
    "type": "baz"
}, {
    "type": "test"
}];

필터를 사용하는 경우는, 다음의 1개의 방법이 있습니다.

myApp.filter('myFilter', function () {
    return function (items, search) {
        var result = [];
        angular.forEach(items, function (value, key) {
            angular.forEach(value, function (value2, key2) {
                if (value2 === search) {
                    result.push(value2);
                }
            })
        });
        return result;

    }
});

그리고 그 바이올린: http://jsfiddle.net/NqA8d/5/

여기서 오브젝트를 변환하는 것이 가장 좋은 방법이라는 것에 동의하지만, 다음 필터 기능도 사용할 수 있습니다.

angular.module('app').filter('objectByKeyValFilter', function () {
return function (input, filterKey, filterVal) {
    var filteredInput ={};
     angular.forEach(input, function(value, key){
       if(value[filterKey] && value[filterKey] !== filterVal){
          filteredInput[key]= value;
        }
     });
     return filteredInput;
}});

다음과 같습니다.

<div ng-repeat="(key, value) in data | objectByKeyValFilter:'type':'foo'">{{key}}{{value.type}}</div> 

'플런커'도 참조해 주세요.

(컨트롤러에서) 다음을 시도합니다.

$scope.notFooFilter = function(item)
{
    return (item.type !== 'foo');
};

HTML 마크업:

<div ng-repeat="item in items| filter:notFooFilter">{{item.type}}</div>

개체를 필터링하려면 이 작업을 수행하십시오.

var rateSelected = $filter('filter')($scope.GradeList, function (obj) {
                        if(obj.GradeId == $scope.contractor_emp.save_modal_data.GradeId)
                        return obj;
                });

그런 건 다 필요 없어.이 솔루션은 필터를 변환하거나 직접 작성할 필요 없이 정상적으로 작동합니다.

 {{myModel.userSelectedHour["Start"]}}

따라서 오브젝트.object.module 대신 ["model"]를 선택합니다.

언급URL : https://stackoverflow.com/questions/19849806/angular-filter-a-object-by-its-properties

반응형