Javascript 从存储在数组中的值筛选数组
我有一个数组Javascript 从存储在数组中的值筛选数组,javascript,arrays,Javascript,Arrays,我有一个数组 sourceArray = [{'type':'A'}, {'type':'B'}, {'type':'C'}, {'type':'D'}]; arrayB = ['B', 'C']; 我想从arrayB包含的值中筛选数组sourceArray。 我们可以通过迭代arrayB来实现这一点,但只需要一些好方法 filteredArray = []; for(x in arrayB) { filteredArray.concat( sourceArray.filter(functi
sourceArray = [{'type':'A'}, {'type':'B'}, {'type':'C'}, {'type':'D'}];
arrayB = ['B', 'C'];
我想从arrayB
包含的值中筛选数组sourceArray
。
我们可以通过迭代arrayB
来实现这一点,但只需要一些好方法
filteredArray = [];
for(x in arrayB)
{
filteredArray.concat( sourceArray.filter(function(e1){ return e1.type == arrayB[x])} );
}
可以通过任何方式更优雅地完成此操作。只需
。筛选它:
sourceArray=[{'type':'A'},{'type':'B'},{'type':'C'},{'type':'D'}];
arrayB=['B','C'];
结果=sourceArray.filter(函数(项){
返回arrayB.indexOf(item.type)>=0;
});
document.write(“+JSON.stringify(result,0,3))代码>
var filteredArray = sourceArray.filter(
function(v){ return this[v.type] }.bind(arrayB.reduce(
function(s,v){ s[v]=1; return s }, Object.create(null)
))
)
var sourceArray=[{
“类型”:“A”
}, {
“类型”:“B”
}, {
'type':'C'
}, {
“type”:“D”
}];
var arrayB=['B','C'];
var desiredArr=sourceArray.filter(函数(val)){
对于(var i=0;i有使用indexOf
的解决方案,但是如果arrayB
数组包含的元素多于几个,那么它包含一个隐藏的迭代,这是非常昂贵的
在一般情况下,有效的解决方案是构建元素的哈希映射,以便更快地执行过滤操作。可以这样做:
在这个代码中,arrayB.reduce(函数(s,v){s[v]=1;返回s},{})是一个对象,它的键是有效的类型:{B:1,C:1}
。JavaScript引擎可以非常快速地重复检索此类对象的属性。谢谢它的工作。请详细说明它是如何工作的。@Ankuli:添加了一个解释arrayB是否只包含少数元素或更多元素?它将包含5-10个元素。返回val
位于if
bock中