Angular/2:过滤具有多个定义属性的JSON响应
更新 正如我所做的: 它起作用了,但一点也不起作用。如果我添加一个其他属性,如c.details.author(字符串[])或c.details.index(数字),它将不起作用,并且函数不会返回任何内容(错误) 下面是我的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
[
{
"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有效但一点也不,请看我更新的主要帖子。