当前位置: 首页 > 面试题库 >

角度过滤对象的属性

仇征
2023-03-14
问题内容

我有一个带有一系列对象属性的对象,这些对象属性具有以下相似的结构(这是从服务返回数据的方式):

{
  "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”类型的项进行迭代
,即3次迭代而不是5次。我知道可以以某种方式利用过滤器来执行此操作,但是我不确定如何执行。我尝试了以下方法:

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

但这不起作用。实际上,即使执行以下操作以将对象限制为2个(具有item.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>

但是,我知道这是行不通的。


问题答案:

过滤器适用于数组,但是您有一个对象常量。

因此,您可以将对象文字转换为数组,也可以创建自己的过滤器,然后再接收对象文字。

如果不需要这些索引值,那么转换为数组可能是最好的选择(这是该数组起作用的小提琴:http :
//jsfiddle.net/NqA8d/3/):

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

如果您想做一个过滤器,这是一种方法:

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/



 类似资料:
  • 我有完全合法的数据来源: 我将其显示在这样的表中: 现在假设我想过滤我的数组。如果我有固定的行数,我可以在< code>tr元素上使用< code>*ngIf来选择显示/不显示一个项目,但是Angular不允许在一个元素上有两个结构指令。 我知道我可以使用< code>Array.filter简单地过滤源数组,但是这样会产生一个副本,如果我的数组大得多,这可能会成为一个问题。 我想将该行嵌套在某个

  • 问题内容: 我有一个像这样的小角度应用程序: html app.js 输出 我想做的是 仅对 过滤器参数进行 完全 匹配,并且仅对id字段进行过滤。 基本上,我希望输出为: 输出 我正在使用Angular 1.2。 问题答案: 在Angular 1.1.3或更高版本中,可以使用以下命令: 说只能和现场比较。那会让你: 说“完全匹配”,结果是: 工作原理如下:http : //jsfiddle.ne

  • 我有一个名为的对象,它描述了一个项目的买卖行为。与其他一些属性相比,它主要如下所示: 具有各自的吸气器和设置器。是该项目应出售/购买的金额,ItemData描述该项目的规格。PriceType是一个枚举,它是或。 我现在有一个方法,是哪个工作,在一个列表中找到最匹配的价格。我的所有价格都存储在一个简单称为的列表中。到目前为止,我的方法只是遍历列表,并返回与和匹配的第一个: 然而,这完全忽视了一个事

  • 我有一些对象实现了一些接口,但是它们也有额外的属性。当我来序列化它们(保存在文件中)时,我想删除所有这些额外的属性,只保留与接口匹配的属性。 有没有办法“清理”有关给定接口的对象。我正在尝试 要获取对象属性的完整列表,并与接口属性的完整清单进行比较,但我无法找到获取接口属性列表的方法 编辑:我在这里找到了一种方法:如何基于TypeScript中的接口文件定义创建对象? 跟 但是我看到当我使用 Ob

  • 我有: 我尝试使用map()和filter()实现myFunction,但无法使其正常工作。如果我有接近的想法,我会展示一些我尝试过的代码,不幸的是,情况并非如此。任何帮助都将不胜感激!

  • 我正在尝试过滤scala中对象列表的列表属性。例如: 用java定义的类 我的过滤器函数返回字符串列表而不是结果列表 UPDATE我想取回listOf中的所有结果,其中每个结果的名称属性被过滤。