2016-03-04 171 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.arrayFilterself.helpers獲得與對象一個JSON數組,其中name等於'abc'

但是,如果我有一個字符串數組,如何過濾self.helperstestdata=[' abc ',' def ']

我應該得到的結果如下:

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

是否knockoutjs有類似IN從SQL什麼? jQuery有in_array但我如何在這種情況下使用它,而且:它是最好的方式嗎?

回答

0

不需要特殊的Knockout(或jQuery)代碼,這可以是容易用vanilla 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); 
}