字符串数组方法重写系列

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


(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)从最后以为删除了排序后的最大数,因为返回的包含了被删除项的数组,所以从第一位进行索引

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • php usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解包。 uni...
    思梦PHP阅读 2,025评论 1 24
  • PHP常用函数大全 usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解...
    上街买菜丶迷倒老太阅读 1,390评论 0 20
  • 美景 昨天午间小息时,就在单位的院子里,收获了大自然的馈赠——美景! ...
    笨笨姐妹阅读 257评论 3 6
  • 文/鸿运 品一杯岁月的酒 回味飞逝的春秋 酸甜苦辣样样有 喜怒哀乐伴恐忧 初春寒露依旧在 夏荷池塘任月游 深秋枫红...
    HONGYUNDANGTOU阅读 210评论 11 12