2016-08-18 142 views
0

我使用lodash做在JavaScript数组路口,下面是我努力的代码,我所得到的是如何使用lodash做多维数组相交?

["universal", "ola", "uber", "bangalore"], 

但是,我所期待的 [“万能”]

这里,orgArr multidiemensional阵列项的n个数字,我的意思是,orgArr可具有5个或6或10个项目...例如

[["garden","canons","philips","universal"],["universal","ola","uber","bangalore"], ["ola","uber","bangalore"]]; 

这不仅是两个项目,请注意

var orgArr = [["garden","canons","philips","universal"],["universal","ola","uber","bangalore"]]; 
    var resfinaArray = []; 


    for (var i = 0; i < orgArr.length; i++){ 
     var currItem = orgArr[i]; 

     for (var j = 0; j< orgArr.length; j++){ 

     resfinaArray.push(_.intersection(currItem, orgArr[j])); 
     } 
    } 

    console.log(resfinaArray, 'resfinaArray'); 

任何帮助吗?

+0

心不是这应该只是'var resfinaArray = _intersection(['garden','canons','philips','universal'],['uni versal','uber','bangalore']);' – apieceofbart

+0

@apieceofbart没错。 for循环是多余的。 – undefined

回答

0

您可以使用forEach()循环和可选的thisArg参数来完成此操作。

var orgArr = [["garden","canons","philips","universal"],["universal","ola","uber","bangalore"]]; 
 
var resfinaArray = []; 
 

 
orgArr.forEach(function(a) { 
 
    var that = this; 
 
    a.forEach(function(e) { 
 
    (!that[e]) ? that[e] = true : resfinaArray.push(e); 
 
    }) 
 
}, {}); 
 

 
console.log(resfinaArray);

+0

你的工作只适用于两个项目,它应该与额外的时间以及任何工作 – User123

+0

不知道你的意思https://jsfiddle.net/Lg0wyt9u/1140/? –

+0

你的jsfiddle工作正常,但仍然有一些缺陷。它正在resfinaArray上推重复项目。试试这个var orgArr = [[“garden”,“canons”,“philips”,“universal”],[“universal”,“ola”,“uber”,“bangalore”,“philips”],[“bangalore” , “飞利浦”],[ “通用”, “OLA”, “超级”, “班加罗尔”]]; – User123

0

随着ES6,你可以使用SetArray#reduce

var array = [["garden", "canons", "philips", "universal"], ["universal", "ola", "uber", "bangalore"], ["abc", "def", "universal"]], 
 
    result = [...array.reduce((r, a, i) => 
 
     a.reduce((s, b) => 
 
      (!i || r.has(b)) && s.add(b) || s, new Set), new Set)]; 
 
    
 
console.log(result);

0

如下我会做这个工作;

var intersectArrays = a => a.reduce((p,c) => p.filter(e => c.includes(e))), 
 
       arr = [["garden","canons","philips","universal"],["universal","ola","uber","bangalore"], ["ola","uber","bangalore", "universal"]], 
 
       brr = intersectArrays(arr); 
 
console.log(brr);

0

你不需要循环:

var intersection = _.intersection(["garden","canons","philips","universal"],["universal","ola","uber","bangalore"]); 

如果你有数组数据,你可以使用apply

var intersection = _.intersection.apply(null, [["garden","canons","philips","universal"],["universal","ola","uber","bangalore"]]);