2017-04-04 89 views
1

找到交集的速记和最佳方式是什么?匹配两个javascript数组以形成交集结果

f = ["A","B","C","D","E","F"]; //might be less than 8 
b = [1,0,0,1,0,0,0,0]; //always 8 elements 

期望的结果数组[ “A”, “d”]

+1

为什么' “C”',它是在'F'的第三个元素?不应该是'D'? – RomanPerekhrest

+1

要么你想要的是错的,要么我没有得到它。应该是[“A”,“D”] – Konstantinos

+0

是的,你是对的。我纠正了错误。感谢您的通知 – aliaktas

回答

4

你可以使用Array#filter

var f = ["A", "B", "C", "D", "E", "F"], 
 
    b = [1, 0, 0, 1, 0, 0, 0, 0], 
 
    r = f.filter((_, i) => b[i]); 
 

 
console.log(r);

+0

*我想要过滤相同的地方所期望的结果数组[[A,C]] * – RomanPerekhrest

+0

。 –

2

假设你f阵列比你b阵列

f.filter((item, index) => b[index] === 1); 

如果你想这永远不会再完全速记你可以重命名itemindex并删除=== 1

f.filter((a, i) => b[i]); 

var f = ["A","B","C","D","E","F"]; //might be less than 8 
 
var b = [1,0,0,1,0,0,0,0]; //always 8 elements 
 
console.log(f.filter((a, i) => b[i]));

+0

*在我的回答中,我的状态是:“......并且假设你的意思是D而不是C”,期望的结果数组[[A],“C”] * – RomanPerekhrest

+0

@RomanPerekhrest。 –

1

var f = ["A","B","C","D","E","F"]; 
 
var b = [1,0,0,1,0,0,0,0]; 
 

 
var res = f.filter(function(e, i) { 
 
    return b[i]; // short for return b[i] === 1; 
 
}); 
 

 
console.log(res);

甚至使用箭头功能这样短:

var f = ["A","B","C","D","E","F"]; 
 
var b = [1,0,0,1,0,0,0,0]; 
 

 
var res = f.filter((e, i) => b[i]); 
 

 
console.log(res);

+0

*期望的结果数组[“A”,“C”] * – RomanPerekhrest

+0

@RomanPerekhrest我注意到了,我仍在等待用户澄清!这可能只是一个错字! –

+1

@RomanPerekhrest如果想要的结果是'[A,C]',那完全没有意义。 –

0

另一种方式:

$(function(){ 
 
    f = ["A","B","C","D","E","F"]; 
 
    b = [1,0,0,1,0,0,0,0]; 
 
    x = []; 
 
    $.each(b,function(key, value){ 
 
    value?x.push(f[key]):''; 
 
    }); 
 
    console.log(x) 
 
});

+0

jquery一直都在,但为什么? –

+1

@NinaScholz他可能是一个jQuery-phobic http://needsmorejquery.com/! –

+1

@ibrahimmahrir :)) –

0

由于for循环比过滤方法更快我的建议是:

var results = []; 
for(var i=0;i<b.length;i++){ 
    if (b[i]) results.push(f[i]); 
} 
+0

你不需要带有真值的'== 1'。 –