美文网首页
让前端面试不再难(二)

让前端面试不再难(二)

作者: 我是一个前端 | 来源:发表于2019-01-25 16:10 被阅读0次

昨天聊了一个算法题,今天接着聊!多聊几个。

1、拍平数组(多维数组变成一维数组)

      let arr = [1,[2,3,[4],[5,6,[7]]],8]//[1,2,3,4,5,6,7,8]
      //这个有很多方法,我们一一说来
      //第一种遍历数组,遍历过程遇到数组递归。
       function flatten(arr, newArr) {
            //省去全局变量,还避开了函数嵌套闭包的形成。
            newArr = newArr || []
            for (let i = 0; i < arr.length; i++) {
                //如果是arr[i]是数组那么递归执行,并把当前arr[i]和已有newArr传进去继续push。
                //如果不是直接push到newArr
                typeof arr[i] === 'object' ? flatten(arr[i], newArr) : newArr.push(arr[i])
            }
            return newArr
        }
        console.log(flatten(arr))
        //第二种,逻辑一样只不过遍历换成了reduce,如果读的比较困难请移步:https://www.jianshu.com/p/5c562787b495 了解reduce
        function flatten1(arr) {
            return arr.reduce((newArr, item) => {
                return typeof item === 'object' ? newArr.concat(flatten1(item, newArr)) : (newArr.push(item), newArr)
            }, [])
        }
        console.log(flatten1(arr))
        //第三种比较简单
        function flatten2(arr) {
            //join会默认过滤数组内部[],算是一个奇淫技巧。
            return arr.join(',').split(',')
        }
        console.log(flatten2(arr))
        //第三种稍有点问题,如果数组内是number类型会拍平后会变成字符串。

2、写一个方法判断字符串内()是否成对出现,是返回true不是返回false

        let str = '(()()())'
        let str1 = '(())()())'

        //1、先用栈的思路解决
        function isTure(str, result = []) {
            let arr = str.split('')
            for (let i = 0; i < arr.length; i++) {
                const item = arr[i];
                // 如果是左括号直接压栈
                if (item === '(') {
                    // 压栈
                    result.push(item);
                    // 如果是右括号且当前arr不为空弹出栈顶
                } else if (item === ')' && result.length != 0) {
                    // 弹出栈顶
                    result.pop()
                } else {
                    //如果是右括号且当前result为空,则直接判定为不合法
                    return false
                }
            }
            return result ? true : false
        }

        console.log(isTure(str)) //true
        console.log(isTure(str1)) //false

        2、用计数方式其实和栈原理类似
        function isTure1(str, count = 0) {
            let arr = str.split('')
            for (let i = 0; i < arr.length; i++) {
                const item = arr[i];
                if (item === '(') {
                    count++
                } else if (item === ')' && count != 0) {
                    count--
                } else {
                    return false
                }
            }
            return !count ? true : false
        }
        console.log(isTure1(str))//true
        console.log(isTure1(str1))//false

ok 今天分享就到这,明天继续!

相关文章

  • 让前端面试不再难(二)

    昨天聊了一个算法题,今天接着聊!多聊几个。 1、拍平数组(多维数组变成一维数组) 2、写一个方法判断字符串内()是...

  • 让前端面试不再难(三)

    今天聊一下clone这个前端面试高频问题,由此引出typeof、instanceof、Object.prototy...

  • ios 各种面试题链接以及面试知识点

    搜罗各种公司的面试题(百面网)让 BAT 的 Offer 不再难拿(bestswifter)

  • 让前端面试不在难(一)

    从今天开始,我从面试题切入开始做一些详解和记录。 要求以对象value的大小排序返回[c,a,b,f,d] 问题解...

  • 前端模拟面试【二面】

    前言 之前写了一篇关于前端模拟面试的文章——前端模拟面试【一面】 今天咱们接着进行前端模拟面试二面。因为有很多是一...

  • 常用链接

    面试链接 招聘一个可靠的iOS面试题参考答案iOS中级面试题让BAT的offer不再难拿 博客链接 零碎知识点iO...

  • 前端面试的经典题

    前端面试的经典题 前端面试三部曲 前端面试概念收集器 前端面试的经典题 前端面试的难题和怪题 Javascript...

  • 值得看的前端面试文章- 收藏集 - 掘金

    【前端面试 -- 四月二十家前端面试题分享】1-5 套个人解题答案 - 前端 - 掘金前端面试题 前端面试--四月...

  • 前端面试概念收集器

    前端面试概念收集器 前端面试三部曲 前端面试概念收集器 前端面试的经典题 前端面试的难题和怪题 本文分为 概念,原...

  • 前端面试的难题和怪题

    前端面试的难题和怪题 前端面试三部曲 前端面试概念收集器 前端面试的经典题 前端面试的难题和怪题 函数 答案 Er...

网友评论

      本文标题:让前端面试不再难(二)

      本文链接:https://www.haomeiwen.com/subject/wjapjqtx.html