【问题标题】:angular filtering nested objects: AND vs OR角度过滤嵌套对象:AND vs OR
【发布时间】:2015-05-11 19:26:50
【问题描述】:

我正在使用控制器级别的角度过滤,即filterFilter。我需要实现嵌套过滤,但我不确定如何以最好的方式实现。

我有一组如下所示的对象:

{
  "id": "5d004ff4-46a9-47d5-b068-6b9d581bb6fa",
  "number": 80501703098,
  "firstName": "Loma",
  "lastName": "Collins",
  "age": 44,
  "birthDate": "1980-08-21T12:40:47.026Z",
  "address": {
    "street": "2209 Hirthe Plains",
    "city": "North Heathertown",
    "postCode": "24805"
  },
  "email": {
    "home": "Josefa49@yahoo.com",
    "work": "Phoebe64@sdc.dk"
  },
  "phone": {
    "mobile": "+82 763 681 802",
    "home": "(453) 312 255 267",
    "work": "+45 843 108 216"
  }
}

我还有一个表单可以接受几个纯文本输入和控制器的代码:

XyzModule.run(['filterFilter', function(filterFilter){
  data = ... // above collection
  params = ... // data from the form
  filtered = filterFilter(data, {
    number: params.number,
    lastName: params.lastName,
    firstName: params.firstName
  });
});
// this has been manually transpiled from .coffee
// don't pay attention if there are errors in the syntax

上面的代码可以通过numberlastNamefirstName成功找到集合对象——很好。


现在我想通过emailphone 进行搜索。这里的情况是搜索表单接受纯文本字段:电话和电子邮件一样只是一个字符串。但是集合中的对象具有嵌套的电话和嵌套的电子邮件值。

我想实现过滤数据,当 params.email 是 email.home 或 email.work 时匹配对象。类似地,当 params.phone 是 either phone.mobile OR phone.home OR home.work 时。 params 是搜索表单输入值的映射。

我尝试了类似的方法:

  filtered = filterFilter(data, {
    phone: params.phone,
    email: params.email
  });

但它不起作用,可能格式无效。

  filtered = filterFilter(data, {
    phone: {
      home: params.phone,
      mobile: params.phone,
      work: params.phone
    },
    email: {
      home: params.email,
      work: params.email
    }
  });

也不起作用,因为它应用 AND 而不是 OR 并且对于不同的手机或不同的电子邮件不可能具有相同的值。

【问题讨论】:

    标签: angularjs filtering


    【解决方案1】:

    您可以使用$ 通配符:

    filtered = filterFilter(data, {
      phone: {
        $: params.phone
      },
      email: {
        $: params.email
      }
    });
    

    【讨论】:

    • OP,我很想知道这是否可行,因为我为这个问题推出了自己的解决方案,很高兴知道这是否会浪费大量时间......
    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2020-07-28
    相关资源
    最近更新 更多