2022.05.31 前端学习记录

98 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

五月的最后一天,六月要继续加油

part1 算法题

【151】 翻转字符串里的单词 力扣地址

简易做法:


            // 将字符串去掉前后的空格,然后将其按空格分为数组,对数组进行过滤,过滤掉中间的空格,形成了一个只有字符串的数组

            // 然后再进行反转操作

            let newArr = s.trim().split(' ').filter( v=>{

                if(v.length > 0) return v

            })

            let l = 0,r = newArr.length - 1

            while(l < r){

                [newArr[l],newArr[r]] = [newArr[r],newArr[l]]

                l++

                r--

            }

            console.log(newArr)

            return newArr.join(' ')

        };

手动反转,不使用api,而是先去反转整个字符串,然后再针对每个单词进行反转


            // 1,去掉字符串中多余的空格

            function removeExtra(s){

                // 定义快指针慢指针

                let slowIndex = 0,fastIndex = 0

                // 去掉开头的空格

                while(s.length > 0 && fastIndex < s.length && s[fastIndex] == ' '){

                    fastIndex++

                }

                // 去掉中间多余的空格

                for(;fastIndex < s.length;fastIndex++){

                    if(fastIndex - 1 > 0 && s[fastIndex - 1] == s[fastIndex] && s[fastIndex] == ' '){

                        continue

                    }else{

                        s[slowIndex++] = s[fastIndex]

                    }

                }

                // 去掉字符串末尾的空格

                if(slowIndex - 1 > 0 && s[slowIndex - 1] == ' '){

                    s.length = slowIndex - 1

                }else{

                    s.length = slowIndex

                }

            }

            // 2,反转字符串

            function reverse(s,l,r){

                for(let i = l ,j = r;i < j;i++,j--){

                    [s[i],s[j]] = [s[j],s[i]]

                }

            }

\


            // 3,下面是真正开始操作

            const strArr = Array.from(s);

            removeExtra(strArr)  //去除多余的空格

            reverse(strArr,0,strArr.length -1);  //将整个数组进行反转

            let start = 0

            for(let i = 0;i <= strArr.length;i++){ // 再将每个单词进行反转

                if(strArr[i] === ' ' || i === strArr.length){

                    reverse(strArr,start,i-1);

                    start = i + 1

                }

            }

            console.log(strArr.join(''))

            return strArr.join('')

        }

part2 项目知识点

1,遇到@forceUpdate方法,一般会绑定在一个元素上面, 一般是@change=@forceUpdate,就是元素发生改变的时候,就会调用这个方式,

这个方法是vue上的一个方法,forceUpdate就是重新render。

一般用到的地方:有些变量不在state上,但是你又想达到这个变量更新的时候,刷新render;或者state里的某个变量层次太深,更新的时候没有自动触发render。这些时候都可以手动调用forceUpdate自动触发render。