2017-10-12 121 views
1

匹配来自阵列搜索与价值第一的值,所以我们说,我们有两个数组使用Javascript - 从其他阵列

const arr1 = [1, 2, 3, 4, 5]; 

const arr2 = [6, 7, 8, 9, 10, 4, 5,]; 

我想不用做两个for循环只返回第一个匹配值。所以不要通过从arr1获取第一个值,然后在arr2中查找第二个值。我需要返回4

在没有jQuery的React/Redux环境中工作可能。

+0

任何特殊的理由,为什么你不想要的循环? –

+1

也许他的老师说不要这样做。 – epascarello

+0

我使用了大量的数据,因此for循环需要很长时间才能执行。最后一个我花了大约20秒 –

回答

3
const arr1 = [1, 2, 3, 4, 5]; 

const arr2 = [6, 7, 8, 9, 10, 4, 5,]; 

arr1.find((x) => arr2.indexOf(x) >=0); 

这会抢在第一场比赛

+1

不应该返回indexOf(x)> -1'吗? – pete

+0

@pete'0> = 0'与'0> -1'相同 –

+0

没有看到'=':)。谢谢! – pete

0

您可以使用find()includes()方法。

const arr1 = [1, 2, 3, 4, 5]; 
 
const arr2 = [6, 7, 8, 9, 10, 4, 5,]; 
 

 
var r = arr1.find(e => arr2.includes(e)); 
 
console.log(r)

0

Ecmascript5溶液(用Array.some()功能):

var arr1 = [1, 2, 3, 4, 5], 
 
    arr2 = [6, 7, 8, 9, 10, 4, 5,], 
 
    result; 
 
\t 
 
arr2.some(function(n){ return arr1.indexOf(n) !== -1 && (result = n) }) 
 

 
console.log(result);

0

你可以使用的Set力量。

const 
 
    arr1 = [1, 2, 3, 4, 5], 
 
    arr2 = [6, 7, 8, 9, 10, 4, 5], 
 
    result = arr2.find((s => a => s.has(a))(new Set(arr1))); 
 

 
console.log(result);