Angular/2:过滤具有多个定义属性的JSON响应

Angular/2:过滤具有多个定义属性的JSON响应,json,angular,typescript,properties,indexof,Json,Angular,Typescript,Properties,Indexof,更新 正如我所做的: 它起作用了,但一点也不起作用。如果我添加一个其他属性,如c.details.author(字符串[])或c.details.index(数字),它将不起作用,并且函数不会返回任何内容(错误) 下面是我的JSON数据库的摘录: [ { "index": 1, "name": "ad dolor ipsum quis", "details": { "author": ["Wallace Stephens", "Steve Ballmer

更新

正如我所做的:

它起作用了,但一点也不起作用。如果我添加一个其他属性,如c.details.author(字符串[])或c.details.index(数字),它将不起作用,并且函数不会返回任何内容(错误)

下面是我的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数据表

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

我希望能够进行筛选,不仅按名称,还按详细信息。作者,详细信息。游戏。名称,详细信息。首次发布。。。等等


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

现在我可以考虑两种方法:

1st:

:创建一个
函数
来解析
(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;
  });
});

现在我可以用两种方法来思考:

1st:

:创建一个
函数
来解析
(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;
  });
});

嘿,我的答案对你有用吗?@developer033一点也不,请看我更新的主要帖子:)嘿,我的答案对你有用吗?@developer033一点也不,请看我更新的主要帖子:)@developer003有效但一点也不,请看我更新的主要帖子。@developer003有效但一点也不,请看我更新的主要帖子。