我有以下陣列
let tableA=[{id:'1', name:'name1',age:'31',gender:'male',class='B'},
{id:'2', name:'name2',age:'38',gender:'male',class='A'},
{id:'3', name:'name3',age:'35',gender:'male',class='C'},
{id:'4', name:'name4',age:'20',gender:'female',class='B'},
{id:'5', name:'name5',age:'19',gender:'female',class='A'},
{id:'6', name:'name6',age:'31',gender:'male',class='A'}
];
和這個過濾器陣列
let filters = [{type:'gender',value:"male"}, {type:'age',value:"31"}];
我正在嘗試使用表過濾器的值過濾 tableA,所有過濾器都必須匹配。過濾器不是靜態的,這意味著過濾器可以包含所有表鍵的 json 檔案。
到目前為止,我正在嘗試使用上面的代碼過濾 table_A。
let filtered_table=[];
tableA.forEach(row => {
filters.map((item) => {
if(row[item.type]==item.value){
filtered_table.push(row);
}
});
});
console.log(filtered_table);
上面代碼的結果是:
[ { id: '1', name: 'name1', age: '31', gender: 'male', class: 'B' },
{ id: '1', name: 'name1', age: '31', gender: 'male', class: 'B' },
{ id: '2', name: 'name2', age: '38', gender: 'male', class: 'A' },
{ id: '3', name: 'name3', age: '35', gender: 'male', class: 'C' },
{ id: '6', name: 'name6', age: '31', gender: 'male', class: 'A' },
{ id: '6', name: 'name6', age: '31', gender: 'male', class: 'A' } ]
我如何才能只取回與所有 filters_table 專案組合匹配的行?對于這個例子,我期待這個:
[ { id: '1', name: 'name1', age: '31', gender: 'male', class: 'B' },
{ id: '6', name: 'name6', age: '31', gender: 'male', class: 'A' } ]
uj5u.com熱心網友回復:
let filtered_table=[];
tableA.forEach(row => {
const flag = filters.map((item) => {
if(row[item.type]==item.value){
return 1;
} else {
return 0;
}
});
if(flag.filter(el=>el != 1).length==0) {
filtered_table.push(row);
}
});
console.log(filtered_table);
uj5u.com熱心網友回復:
您所追求的是.every方法See Docs。
var filters = [
{ type: "gender", value: "male" },
{ type: "age", value: "31" },
];
var tableA = [
{ id: "1", name: "name1", age: "31", gender: "male", class: "B" },
{ id: "2", name: "name2", age: "38", gender: "male", class: "A" },
{ id: "3", name: "name3", age: "35", gender: "male", class: "C" },
{ id: "4", name: "name4", age: "20", gender: "female", class: "B" },
{ id: "5", name: "name5", age: "19", gender: "female", class: "A" },
{ id: "6", name: "name6", age: "31", gender: "male", class: "A" },
]
var result = tableA.filter(item =>
filters.every(filter => item[filter.type] === filter.value)
);
console.log(result)
// [ { id: '1', name: 'name1', age: '31', gender: 'male', class: 'B' },
// { id: '6', name: 'name6', age: '31', gender: 'male', class: 'A' } ]
下面是一種更詳細的方式,不使用 ES6 語法:
var result tableA.filter(item => {
//ensure every filter has been matched against
var everyFilterMatched = filters.every(filter => {
return item[filter.type] === filter.value;
});
return everyFilterMatched
});
注意:使用編輯,every因為我假設您可能不知道您將擁有多少個過濾器,只是有一個給定形狀的陣列,并且您想匹配所有這些。
uj5u.com熱心網友回復:
用 js 很簡單.filter()。檢查一下
它回圈每個元素tableA并過濾掉性別和年齡
let tableA = [{
id: '1',
name: 'name1',
age: '31',
gender: 'male',
class: 'B'
},
{
id: '2',
name: 'name2',
age: '38',
gender: 'male',
class: 'A'
},
{
id: '3',
name: 'name3',
age: '35',
gender: 'male',
class: 'C'
},
{
id: '4',
name: 'name4',
age: '20',
gender: 'female',
class: 'B'
},
{
id: '5',
name: 'name5',
age: '19',
gender: 'female',
class: 'A'
},
{
id: '6',
name: 'name6',
age: '31',
gender: 'male',
class: 'A'
}
];
let fil = [{
type: 'gender',
value: "male"
}, {
type: 'age',
value: "31"
}];
const data = tableA.filter((ele,index) => {
return ele.gender == fil[0].value && ele.age == fil[1].value
})
console.log(data)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/518538.html
下一篇:在BQ中使用不同鍵決議JSON
