2016-11-10 14 views
0

У меня есть массив объектов, в которых мне нужно сделать подстановочную фильтрацию. Например, мой объект может содержать что-то вроде этого:Использование подстановочных знаков при использовании функции JavaScript JavaScript

var a = [ 
    { 
     "type":"metals", 
     "SN":"SN0000000000" 

    }, 
    { 
     "type":"wood", 
     "SN":"SN0000000001" 
    } 
]; 

Моя фильтрация функция для нормальных критериев будет что-то вроде:

var filtered = a.filter(function(el) { 
     //normal checkbox criteria filter for selectedtype 
     if(!(self.serialno)){ 
     return el.type == self.selectedType 
     } 
     //wildcard text filtering from textfield 
     else{ 
     return typeof el.SN == self.serialno; 
     } 
    }); 

и распечатка результатов было бы что-то вроде:

console.log(filtered); 

Для фильтра стандартных критериев («тип»), в котором я использую выбор критериев выбора, я могу вернуть свой выбранный тип критериев (в виде массива объектов) но в случае «SN», в котором вызывается поиск подстановочных символов на основе текста, я не могу этого сделать.

Например, если бы я должен был ввести «00» в моем подстановочном текстовом поле, функция должна возвращать массив объектов, в котором «SN/SerialNo» содержит «00» (в приведенном выше примере, как объекты в var a).

PS:

self.serialno является строкой, которая извлекается из текстового поля.

el.SN - это массив объектов, возвращаемых функцией фильтра.

Update:

работает этот код:

console.log(self.serialno.test(el.SN)); 

возвращает меня:

enter image description here

+0

'typeof el.SN' вернет тип' el.SN', который будет строкой '' string "'. Это, вероятно, не то, что вы хотите? Не публикуя соответствующий код, этот вопрос может оказаться невозможным. –

+1

Попробуйте использовать regexp, как в 'return self.serialno.test (el.SN);'. –

+0

@ AndyRay, какой вам нужен соответствующий код? Мне нужно вернуть результаты объекта, в которых я искал использование подстановочного знака. – Gene

ответ

0

Насколько я понял из вашего вопроса вы el.SN является строкой представляющий набор сериалов l соответствуют регулярному выражению. Если это так, вы можете использовать функцию test, которая предназначена для тестирования вызывающей строки на регулярное выражение, переданное как параметр.

var patt = new RegExp(self.serialno); 
    if(patt.test(el.SN)){ return el; } 

возвращает истину, если self.serialno матч с регулярным выражением el.SN

Вы говорите, что el.SN является результатом функции яваскрипта фильтра. Я думаю, однако переменная filtered содержит результат этой функции.

el.SN является скорее свойством параметра (el), переданного функции, используемой для фильтрации массива a.

+0

self.serialno - это строка, в которой я извлекаю из самого текстового поля. el.SN - результат функции фильтра javascript. таким образом, я не могу использовать self.serialno.test – Gene

+0

, пожалуйста, проверьте обновления в своем ответе – Sindico

+0

, пожалуйста, проверьте обновления в моем ответе. Большое спасибо за ур. – Gene