美文网首页
字符串数组方法重写系列

字符串数组方法重写系列

作者: 西兰花伟大炮 | 来源:发表于2017-04-29 20:01 被阅读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)从最后以为删除了排序后的最大数,因为返回的包含了被删除项的数组,所以从第一位进行索引

相关文章

  • 字符串数组方法重写系列

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

  • JavaScript--tostring方法

    数组中的 tostring 方法数组中的tostring被重写了,将数组转化成字符串Object.prototyp...

  • String比较

    1.字符串比较 equals 原理是String重写了equals 方法,遍历字符数组。而 == 比较的是两个对象...

  • js强制类型转换

    今日地铁看书总结 强制类型转换 toString()其他数据类型转化为字符串的方法 注意,数组重写了toStrin...

  • String

    String 底层是被final修饰的字符数组,所以字符串生成后不能被修改。 equals方法被重写,比较的是字符...

  • js反转字符串

    先将字符串转为数组,再利用reverse方法反转数组。最后通过join方法将数组重新转回字符串

  • 2020-03-04

    字符串,对象,类数组转换为数组方法 //字符串 // 方法一: let a = 'asasa'; conso...

  • JS字符串数组常用方法

    字符串 参考:js字符串方法 数组 添加能添加多个,删除只能删一个 数组迭代方法 数组缩小方法 对象

  • ES6+ 数组方法

    1 、concat() 数组、字符串合并。 2、 at() 数组、字符串、类数组中添加.at()方法at()支持正...

  • vue中是如何检测数组变化的

    个人理解:.使用函数劫持的方式,重写了数组的方法.Vue将data中的数组,进行了原型链重写,指向了自己定义的数组...

网友评论

      本文标题:字符串数组方法重写系列

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