2016-03-04 3 views
0

У меня есть массив:Фильтр массив из другого массива

self.helpers = [ 
     { name: ' abc ', helper: ' my helper text1 ' }, 
     { name: ' def ', helper: ' my helper text2 ' }, 
     { name: ' xyz ', helper: ' my helper text3 ' } 
]; 

Если у меня есть одна строка var testdata = 'abc', я могу использовать ko.utils.arrayFilter, чтобы получить массив JSON с объектами из self.helpers где name равна 'abc'.

Но что делать, чтобы фильтровать self.helpers, если у меня есть строковый массив: testdata=[' abc ',' def ']?

я должен получить результат, как показано ниже:

[{ name: ' abc ', helper: ' my helper text1 ' }, 
{ name: ' def ', helper: ' my helper text2 ' }]; 

есть ли knockoutjs ничего подобного IN из SQL Server? jQuery имеет in_array, но как его использовать в этом случае, и более того: это лучший способ?

ответ

0

Не требуется специальный код для нокаута (или jQuery), это может быть легко сделано с ванилью Javascript. Вот мое предложение, используя indexOf:

var helpers = [ 
 
    { name: ' abc ', helper: ' my helper text1 ' }, 
 
    { name: ' def ', helper: ' my helper text2 ' }, 
 
    { name: ' xyz ', helper: ' my helper text3 ' } 
 
]; 
 

 
var testdata = [' abc ',' def ']; 
 

 
var result = helpers.filter(function(h) { 
 
    return testdata.indexOf(h.name) >= 0; 
 
}); 
 

 
// for demo: 
 
document.getElementById("x").innerHTML = JSON.stringify(result, null, 2);
<pre id="x"></pre>

Кстати, jQuery's inArray function использует то же самое в его реализации, которая в настоящее время сводится к:

inArray: function(elem, arr, i) { 
    return arr == null ? -1 : indexOf.call(arr, elem, i); 
} 
Смежные вопросы