Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 数组交集(集合论)与Array.prototype.reduce_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

Javascript 数组交集(集合论)与Array.prototype.reduce

Javascript 数组交集(集合论)与Array.prototype.reduce,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我有两个数组[a,b,c,d]和[b,d,f,h] 我想得到一个包含公共元素的数组[b,d] 我可以通过组合使用filter和indexOf来实现这一点: [a,b,c,d].filter(el => [b,d,f,h].indexOf(el) !== -1) 但我想知道我是否可以,以及如何使用reduce实现同样的效果 我承认,尽管看了很多例子,reduce对我来说仍然是最模糊的JS方法之一,因此我非常感谢一些建议。reduce设计用于从项目列表中返回单个值。所以过滤器在这里更有意义

我有两个数组
[a,b,c,d]
[b,d,f,h]

我想得到一个包含公共元素的数组
[b,d]

我可以通过组合使用
filter
indexOf
来实现这一点:

[a,b,c,d].filter(el => [b,d,f,h].indexOf(el) !== -1)
但我想知道我是否可以,以及如何使用
reduce
实现同样的效果


我承认,尽管看了很多例子,
reduce
对我来说仍然是最模糊的JS方法之一,因此我非常感谢一些建议。

reduce设计用于从项目列表中返回单个值。所以过滤器在这里更有意义

reduce的一个好用法是返回公共元素的总数。在这里查看:

ES6,一个带有

includes()
方法确定数组是否包含特定元素,并根据需要返回
true
false

aa
的每个循环上,如果在测试数组
bb
中找到值,reduce会将元素添加到结果数组中。如果未找到,则返回前一个结果

var aa=['a','b','c','d'],
bb=['b','d','f','h',],
cc=aa.减少((r,a)=>bb.包括(a)和&r.concat(a)| | r,[]);

控制台日志(cc)不仅是两个数组,而且对于n个数组的交集。。。让我们发明
Array.prototype.intersect()

Array.prototype.intersect=函数(…a){
返回[this,…a].reduce((p,c)=>p.filter(e=>c.includes(e));
}
var arrs=[[0,2,4,6,8],[4,5,6,7],[4,6],
arr=[0,1,2,3,4,5,6,7,8,9];
log(JSON.stringify(arr.intersect(…arrs));
//还是就这么做

log(JSON.stringify([“a”、“b”、“c”、“d”]).intersect([“b”、“d”、“f”、“h”))我非常喜欢,谢谢!你知道一种使用
reduce
只获得相同结果的方法吗?你的意思是没有include或indexof?是的,这可能是因为我不理解
reduce
。回答得好,尼娜!我不知道你的代码的具体行为,所以我做了一些修改以便更好地理解你的代码。也许这会对某人有所帮助:-)@JoseHermosillaRodrigo,对,这是if的缩写形式。。。或者最好是三元。尝试使用
reduce
实现
filter
是否需要
JSON.stringfy
?@U r s s实际上不需要,但它水平显示数组和对象。
var a = ['a','b','c','d']
var b = ['b','d','f','h']

var number_of_common = b.reduce(function(prev, next) {
    return prev + (a.indexOf(next) + 1 ? 1 : 0)
}, 0)

$('body').html(number_of_common)