字符串数组方法重写系列

2017-04-29  本文已影响10人  西兰花伟大炮

其实这个东西吧,可以用来做一定的兼容处理,但更多是为了加深对语言本身的理解,毕竟原生方法更高效,锻炼一下你灵活运用语言的能力


(1)字符串repeat
String.prototype.repeat_num = function(n){
    return new Array(n+1).join(this + " ");
}
console.log("weidapao".repeat_num(3));

ES6引入了原生字符串方法 repeat()

(2)模拟Array的sort()

对字符串数组进行排序

var testArr = ['a','bb','ccc','dd','hhhhh','gggg'];
        console.log(testArr.sort(function(a,b){
            return a.length - b.length;
        }))

可以对数字与字符串数组进行排序

 Array.prototype.sort = function(fn){
              var arr = this;
              var len = this.length,temp;
            for(var i = 0;i < len -1;i++){
                var isSorted = true;
                for(var j = 0;j < len - i -1;j++){
                    if(fn(arr[j],arr[j+1]) > 0){
                        temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                        isSorted = false;
                    }
                }
                if(isSorted){
                    break;
                }
            }
            return arr;
        }

console.log([10,9,7,8,6,4,3,12,40].sort(function(a,b){
            return a - b; 
}))
(4)实现一个方法对以空格分隔的单词进行首字母转大写,直接写入字符串原型方法

能够优化的地方在于使用箭头函数,链式操作,然后注意箭头函数中this指向的问题,匿名函数中this指向调用者,是在执行时绑定,箭头函数中是在声明时绑定,始终指向函数的宿主对象

1. 不优化的方法
String.prototype.capitalize = function(){
            let strToArr = this.split(' ');  //将字符串通过空格转为数组
            let tempArr = [];
            for(let i = 0;i < strToArr.length;i++){
                tempArr[i] = strToArr[i].charAt(0).toUpperCase() + strToArr[i].slice(1);
            }
            return tempArr.join(' ');  //将数组还原为字符串
2. 使用ES5链式操作
String.prototype.capitalize = function(){
            var tempArr = this.split(' ').map(function(item,index){
                return item = item.charAt(0).toUpperCase() + item.slice(1);
            }).join(' ');
            return tempArr;
            }
3. 链式操作加箭头函数
String.prototype.capitalize = function(){
            let tempArr = this.split(' ').map((item,index)=>{
                return item = item.charAt(0).toUpperCase() + item.slice(1);
            }).join(' ');
            return tempArr;
        }
        console.log(introduce.capitalize()); //I Am Very Good At Hunter
4. 找到数组中的最大值
image.png

需要注意的点是第一种利用了apply传参为数组,第四种使用splice(-1)从最后以为删除了排序后的最大数,因为返回的包含了被删除项的数组,所以从第一位进行索引

上一篇 下一篇

猜你喜欢

热点阅读