从Javascript中的两个数组数组中获取一些基于条件的数组

我在Javascript中有两个数组数组

var array1 = [[10, 2], [11, 4], [12, 30], [13, 17], [14, 28]];
var array2 = [[8, 13], [9, 19], [10, 6], [11, 7], [12, 1]];

我想从array1获取与array2的每个数组的第一个元素匹配的数组

在我的示例中,array1和array2都有数组,第一个元素为10 11和12,所以它应该返回

[[10, 2], [11, 4], [12, 30]];

有没有任何简单有效的方法使用纯javscript或lodash,undercor框架或类似的东西.没有迭代并且逐个匹配这两个数组?

最佳答案
在ES6中,您可以使用Set.

var array1 = [[10, 2], [11, 4], [12, 30], [13, 17], [14, 28]],
    array2 = [[8, 13], [9, 19], [10, 6], [11, 7], [12, 1]],
    set = new Set(array2.map(a => a[0])),
    result = array1.filter(a => set.has(a[0]));

console.log(result);

带有对象作为哈希表的版本

var array1 = [[10, 2], [11, 4], [12, 30], [13, 17], [14, 28]],
    array2 = [[8, 13], [9, 19], [10, 6], [11, 7], [12, 1]],
    result = array1.filter(function (a) {
        return this[a[0]];
    }, array2.reduce(function (r, a) { 
        r[a[0]] = true;
        return r;
    }, Object.create(null)));

console.log(result);

转载注明原文:从Javascript中的两个数组数组中获取一些基于条件的数组 - 代码日志