【问题标题】:Angular/2: Filtering a JSON response with multiple defined propertiesAngular/2:过滤具有多个已定义属性的 JSON 响应
【发布时间】:2017-10-05 05:45:48
【问题描述】:

更新

作为developer003 suggested,我这样做了:

它可以工作,但根本不行。如果我将其他属性添加为 c.details.author (string[]) 或 c.details.index (number),它不起作用,并且函数不返回任何内容(错误)。

这里是我的 JSON 数据库的摘录:

[
  {
    "index": 1,
    "name": "ad dolor ipsum quis",
    "details": {
      "author": ["Wallace Stephens", "Steve Ballmer"],
      "game": {
        "short": "tdp",
        "name": "Thief: The Dark Project"
      },
      "newdark": {
        "required": true,
        "version": "1.20"
      },
      "firstreleasedate": "2007/04/27",
      "lastupdatedate": "2017/01/28"
    }
  }
]

所以我可以查找字符串以外的其他详细信息属性。有什么想法吗?


原帖

我创建了一个函数,当我将其称为(keyup)事件时,当我在输入中键入内容时过滤 HTML 数据表。

return c.name.toLowerCase().indexOf(input.target.value.toLowerCase()) != -1;

我希望能够过滤,不仅可以按 name,还可以按 details.authordetails.game.namedetails.firstrelease...等

如何更改c.name 以应用这些属性?我需要创建一个循环吗?我应该使用 .map() 吗?

【问题讨论】:

  • 嘿,我的回答对你有用吗?
  • @developer033 完全没有,请看我更新的主帖 :)

标签: json angular typescript properties indexof


【解决方案1】:

目前我可以考虑两种方法:

第一:

º 创建一个function解析 (toLowerCase()) 属性值并处理它是否包含该值:

containsVal(property, value) {
  return property.toLowerCase().indexOf(value) !== -1;
}

filterFunc(c) {
  return this.containsVal(c.name, VALUE_TO_SEARCH) ||
    c.details && (
      this.containsVal(c.details.author, VALUE_TO_SEARCH) ||
      this.containsVal(c.details.firstrelease, VALUE_TO_SEARCH) ||
      (c.details.game && this.containsVal(c.details.game.name, VALUE_TO_SEARCH))
    );
}

第二次:

º 映射唯一需要的属性并过滤它们。

arr.map(item => {
  return {
    name: item.name,
    author_details: item.details && item.details.author, 
    firstrelease_details: item.details && item.details.firstrelease, 
    game_name: item.details && item.details.game && item.details.game.name
  };
}).filter(item => {
  return Object.keys(item).some(key => {
    const value = item[key];

    return value && value.toLowerCase().indexOf(VALUE_TO_SEARCH) !== -1;
  });
});

【讨论】:

  • @developer003 成功了,但根本没有,请参阅我的主要更新帖子。
猜你喜欢
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
相关资源
最近更新 更多