Есть ли способ сделать эту функцию рекурсивной, так что мне не нужно создавать переключатель для каждой длины критериев фильтра?Создание функции рекурсивного фильтра javascript
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));
Это так некрасиво, это выглядит почти как VHDL. Извините, nothin 'personal .. – MightyPork
Именно поэтому я задаю вопрос, это работает, но это очень уродливо - я не думаю, что это справедливо, чтобы дать мне негативы на этом, мой код завершен, и мой вопрос ясен! – crankshaft
Ну, это очень грязно, мне трудно понять, какова цель/цель. Не могли бы вы описать желаемое поведение? – MightyPork