У меня есть массив объектов, примерно так:
var myArray = [
{ 'name' : 'some name', id: 23131, 'has' : ['dogs'] },
{ 'name' : 'some name 2', id: 8678, 'has' : ['dogs', 'cats'] },
{ 'name' : 'some name 3', id: 2125 , 'has' : ['donkeys', 'goats']},
{ 'name' : 'some name 4', id: 90867, 'has' : ['parrots', 'treasure'] },
{ 'name' : 'some name 5', id: 435458, 'has' : undefined },
];
И я хочу получить определенные элементы, соответствующие определенным критериям. Например, человек, чье имя содержит число 5, а идентификатор - 435458. Или человек, у которого есть попугай или коза, или и то, и другое.
Метод, который я пытаюсь создать, принимает два аргумента: значение A и значение B. Значение A - это объект, например { 'name' : '5' }, { 'name' : /5/ } или { 'name' : 5 }or {'has': 'goats'}, а значение B - это объект, с которым выполняется сопоставление, т.е. myArray.
Этот метод быстро становится довольно сложным, и я чувствую, что мой код не настолько эффективен и действенен, как мог бы.
Я думаю, что лучший способ добиться этого - перебрать переданные и найденные объекты и массивы (массив myArray, has) и вызвать его самостоятельно, пока не будет сравнено только два значения строки / числа / регулярного выражения. Но я не совсем уверен, как лучше всего этого добиться. Или это не лучший выход? Также скорость - важный критерий успеха.
Ваше здоровье
Изменить: http://jsbin.com/ediye/edit содержит функцию, которую я использую сейчас, и я думаю, что он работает, как описано выше, но довольно медленно для больших наборов данных.