2016-03-04 129 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); 
}