1.js面试题

<script>
        /**
         * 面试题一:获取数组中不同项相同的字符,且长度相同长度最大的,如下最大的是hello
         * 思路:
         *         1.先找到数组中最短的项,用此来做相关判断,可以减少循环
         *         2.再不断的分割最小的项循环寻找,找到的放到对象中,如hello,分割为h,he,hel,hell,hello;e,el,ell,ello等依次往下找
         *         3.再循环对象找到length最大的项
         */
        const arr = [
            'ajddghello',
            'acchello',
            'eehelly'
        ];
        
        console.log(findMinLen(arr));

        function findMinLen(arr) {
            let tem = '';
            let minLen = 0;
            for(let i = 0; i<arr.length; i++) {
                let len = arr[i].length;
                if(i==0) {minLen = len;}
                if(len < minLen) { 
                    minLen = len;
                    tem = arr[i];
                }
            }

            return getBigCommon(tem, arr);

        }
        
        
        function getBigCommon(str, arr) {

            let hash = {};
            for(let i = 0; i<arr.length; i++) {
                for(let j = 1; j<=str.length; j++) {
                    let item = str.slice(i, j);
                    if(fnCircular(item, arr) && !hash[item]) {
                        hash[item] = item;
                    }
                    
                }
            }
            
            let len = 0;
            var maxRepeat = '';
            for(let attr in hash) {
                let valLen = hash[attr].length;
                if(valLen >= len) {
                    len = valLen;
                    maxRepeat = hash[attr];
                }
            }

            return maxRepeat;

        }

        function fnCircular(attr, arr) {
            let re = new RegExp(attr, 'i');
            let onOff = true;
            for(let i = 0; i<arr.length; i++) {
                if(!re.test(arr[i])) {
                    onOff = false;
                    break;
                }
            }
            return onOff;
        }


        /**
         * 面试题二:找到n个数组中的相同元素,如下找到def,循环次数最少
         * 思路:
         *         1.先把数组的每项进行去重
         *         2.再分别去循环没一项,放入到json中,属性值为该数组项,如果json中没有此项就让json对应的值等于1,如果已有此项则+1
         *         3.最后再循环得到的json,遍历每项,如果有等于n的,则返回此项的属性
         */
        const arr2 = [
            'abdcd',
            'def',
            'dgh',
            'def'
        ];
        const arr3 = [
            'aa',
            'sdd',
            'def'
        ];

        const arr4 = [
            'a',
            'sd',
            'def'
        ]

        console.log(findCommonItem(arr2, arr3, arr4));

        function doRepeat(array){ 
            var temArr = []; 
            for(let i = 0; i < array.length; i++){ 
            if (temArr.indexOf(array[i]) == -1) temArr.push(array[i]); 
            } 
            return temArr; 
        }

        function findCommonItem(...arg) {
            var hash = {};
            var len = arg.length;
            for(let i=0; i<len; i++) {
                let temArr = doRepeat(arg[i]);

                for(let attr in temArr) {
                    let tem = temArr[attr];
                    if(hash[tem]) {
                        hash[tem] ++;
                    }else {
                        hash[tem] = 1;
                    }
                }
            }
            //如果想要处理多个,可以放到一个json里,此处就不做处理
            for(let attr in hash) {
                if(hash[attr] === len) {
                    return attr;
                }
            }
            return false;
        }


    </script>

 

posted @ 2017-08-31 16:49  SuLingLiu  阅读(111)  评论(0编辑  收藏  举报