首页 > 技术文章 > 用reduce装逼 之 多个数组中得出公共子数组,统计数组元素出现次数

sowhite 2017-03-22 18:34 原文

昨天做了一道美团的面试题,要求是给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的份了。

加油咯!!!

 

推荐阅读