Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从存储在数组中的值筛选数组_Javascript_Arrays - Fatal编程技术网

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中