如何过滤()JSON 的几列之间的值? Javascript
How can I filter() a value between several columns of my JSON? Javascript
我遇到了一个问题,但我不知道该如何解决。
我有一项服务 return 以下 JSON:
{
"data": [
{
"data": 179,
"data_form": "Finished - Form Covid-19 Test 1",
"form": 144,
"user": 1,
"status": "Finished"
},
{
"data": 176,
"data_form": "In process - Form Covid-19 Test 2",
"form": 144,
"user": 1,
"status": "Finished"
},
{
"data": 177,
"data_form": "Finished - Form Covid-19 Test 3",
"form": 144,
"user": 1,
"status": "In process"
},
{
"data": 178,
"data_form": "Finished - Form Covid-19 Test 4",
"form": 144,
"user": 1,
"status": "In process"
}
]
}
我正在使用一个 PIPE,我将我的数组、我要过滤的值和该值所在的列发送给它:
<ion-list
*ngFor="let form of forms | filter: searchValue: ['status','data_form','data']">
<app-form-user [form]="form">
</app-form-user>
</ion-list>
如果我指定列,它会起作用:
return array.filter(
//It works
item=> item[column[0]].toLowerCase().includes( text )
);
我的想法是在您指示给管道的所有列中查找值,我尝试了以下操作:
1.
return array.filter(
item=> item[column.forEach((data) => found = data )].toLowerCase().includes( text );
);
return array.filter(
item=>Object.keys(column).every(key =>
item[key] == column[key]
)
);
return array.filter(
item=> column.forEach((data) => item[data].toLowerCase().includes( text ))
);
希望大家能帮帮我,谢谢
无需传递列即可工作,搜索所有可用列。
一行代码
此过滤器遍历您必须检查值和 return 结果的每个键。
详细解释:
1) Base is the object you posted and assuming you want to filter the "data"
2) First filter goes thru all the elements in the array
3) second filter goes thru all the keys in the object which is element in the array
4) Checking if the column has the data
5) returns the array of elements if matched
const text = 'Test 2';
return array.filter(v=> Object.keys(v).filter(key=> v[key].toString().toLowerCase().includes(text.toString().toLowerCase())).length > 0)
结果是:
我将使用 .map() 遍历每个项目的每个键,并决定它是否找到了特定的值,return 它在过滤器级别
return array.filter(item => {
let found = false;
Object.keys(item).map(x => {
found = found || item[x].toLowerCase().includes( text );
});
return found;
});
我遇到了一个问题,但我不知道该如何解决。
我有一项服务 return 以下 JSON:
{
"data": [
{
"data": 179,
"data_form": "Finished - Form Covid-19 Test 1",
"form": 144,
"user": 1,
"status": "Finished"
},
{
"data": 176,
"data_form": "In process - Form Covid-19 Test 2",
"form": 144,
"user": 1,
"status": "Finished"
},
{
"data": 177,
"data_form": "Finished - Form Covid-19 Test 3",
"form": 144,
"user": 1,
"status": "In process"
},
{
"data": 178,
"data_form": "Finished - Form Covid-19 Test 4",
"form": 144,
"user": 1,
"status": "In process"
}
]
}
我正在使用一个 PIPE,我将我的数组、我要过滤的值和该值所在的列发送给它:
<ion-list
*ngFor="let form of forms | filter: searchValue: ['status','data_form','data']">
<app-form-user [form]="form">
</app-form-user>
</ion-list>
如果我指定列,它会起作用:
return array.filter(
//It works
item=> item[column[0]].toLowerCase().includes( text )
);
我的想法是在您指示给管道的所有列中查找值,我尝试了以下操作:
1.
return array.filter(
item=> item[column.forEach((data) => found = data )].toLowerCase().includes( text );
);
return array.filter(
item=>Object.keys(column).every(key =>
item[key] == column[key]
)
);
return array.filter(
item=> column.forEach((data) => item[data].toLowerCase().includes( text ))
);
希望大家能帮帮我,谢谢
无需传递列即可工作,搜索所有可用列。
一行代码
此过滤器遍历您必须检查值和 return 结果的每个键。
详细解释:
1) Base is the object you posted and assuming you want to filter the "data"
2) First filter goes thru all the elements in the array
3) second filter goes thru all the keys in the object which is element in the array
4) Checking if the column has the data
5) returns the array of elements if matched
const text = 'Test 2';
return array.filter(v=> Object.keys(v).filter(key=> v[key].toString().toLowerCase().includes(text.toString().toLowerCase())).length > 0)
结果是:
我将使用 .map() 遍历每个项目的每个键,并决定它是否找到了特定的值,return 它在过滤器级别
return array.filter(item => {
let found = false;
Object.keys(item).map(x => {
found = found || item[x].toLowerCase().includes( text );
});
return found;
});