在Javascript中查找另一个数组中数组的每个元素的所有出现

时间:2016-10-21 23:06:36

标签: javascript arrays lodash

我在这里有一个数组:

a = [1, 1, 2, 3, 4, 5, 5, 6, 7, 7]

和另一个,

b = [1, 2, 5]

我想在b中查找数组a的每个元素的所有出现位置。即我想要一个像这样的结果数组:

result = [1, 1, 2, 5, 5]

我正在通过Lodash docs找到可以给我结果的任何方法组合,但还没有设法这样做。有谁知道如何获得result阵列?我更喜欢使用非常简洁的解决方案(即没有太多的循环等),通常Lodash最适合这种情况,但其他解决方案也很好。

3 个答案:

答案 0 :(得分:5)

您只需根据第二个数组

过滤第一个数组

var a = [1, 1, 2, 3, 4, 5, 5, 6, 7, 7];
var b = [1, 2, 5];

var result = a.filter( z => b.indexOf(z) !== -1 );

console.log(result);

答案 1 :(得分:1)

您可以使用for..of循环来迭代b检查a的元素是否等于b中的当前元素

let a = [1, 1, 2, 3, 4, 5, 5, 6, 7, 7];

let b = [1, 2, 5];

let result = [];

for (let prop of b) {
  for (let el of a) {
    if (el === prop) result = [...result, el]
  }
}

console.log(result);

答案 2 :(得分:1)

如果你真的想使用_,你可以使用2个.difference调用。

var a = [1, 1, 2, 3, 4, 5, 5, 6, 7, 7];
var b = [1, 2, 5];

var result = _.difference(a,_.difference(a,b));

console.log(result);
<script src="https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js"></script>