[英]creating a javascript recursive filter function
有沒有什么辦法可以使該函數遞歸,這樣我就不必為每個過濾條件長度都創建一個開關了?
var data = [
{a:'aaa',b:'bbb',c:'ccc',d:'ddd',e:'eee'},
{a:'aaa',b:'bbb',c:'ccc',d:'eee',e:'fff'},
{a:'xxx',b:'bbb',c:'ccc',d:'ddd',e:'fff'}
]
function select(data,where){
return data.filter(function(e){
var k = Object.keys(where);
switch(k.length){
case 1: return (e[k[0]] == where[k[0]]);
case 2: return (e[k[0]] == where[k[0]] && e[k[1]] == where[k[1]]);
case 3: return (e[k[0]] == where[k[0]] && e[k[1]] == where[k[1]] && e[k[2]] == where[k[2]]);
case 4: return (e[k[0]] == where[k[0]] && e[k[1]] == where[k[1]] && e[k[2]] == where[k[2]] && e[k[3]] == where[k[3]]);
case 5: return (e[k[0]] == where[k[0]] && e[k[1]] == where[k[1]] && e[k[2]] == where[k[2]] && e[k[3]] == where[k[3]] && e[k[4]] == where[k[4]]);
}
})
}
var where = {a:'aaa',b:'bbb'}
console.log(select(data,where));
它不需要是遞歸的(我不確定您是否理解這意味着什么),您只需要循環where
的元素:
function select(data, where) { return data.filter(function(e) { var k = Object.keys(where); return k.every(function(key) { return e[key] == where[key]; }); }) } var data = [ {a:'aaa',b:'bbb',c:'ccc',d:'ddd',e:'eee'}, {a:'aaa',b:'bbb',c:'ccc',d:'eee',e:'fff'}, {a:'xxx',b:'bbb',c:'ccc',d:'ddd',e:'fff'} ] var where = {a:'aaa',b:'bbb'} console.log(select(data,where));
試試這個代碼:
function select(data, where) {
return data.filter(function (e) {
for (var key in where) {
if (where.hasOwnProperty(key)) {
if (e.hasOwnProperty(key)) {
if (e[key] != where[key]) {
return false;
}
}
else {
return false
}
}
}
return true;
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.