昨天做了一道美团的面试题,要求是给N个数组,找出N个数组的公共子数组。
var a = [7,2,3,4,5]; var b = [4,2,3,7,6]; var c = [2,3,3,3,7]; var d = [4,2,3,8,7];
以上四个数组,有公共子数组2, 3,7
function main(){ var result = []; var arr = arguments[0]; for(var i=1 ; i<arguments.length ; i++){ var arr = arguments[i].reduce((a,item)=>{ arr.indexOf(item)!=-1 && a.push(item) return a },[]) } return arr }
具体方法如上,es6清新脱俗的写法,用好reduce可以省好多事情。
同样得出以上数组的数组的元素出现次数应该怎么办;
function main(){ var arr = [].reduce.call(arguments,(a,item)=>a.concat(item),[]); return arr.reduce((a,num)=>{ a[num] && ++a[num] || (a[num]=1); return a },{}) }
这个reduce有没有用的清新通俗呀。
我知道大家心里肯定想着好清新的一逼啊。
没错,学好reduce装逼,其他人只有喊666的份了。
加油咯!!!