字符串与数组

字符串与数组1 字符串 1 1 包装对象 点语法只有引用数据可以使用 基本数据调用点语法时 有一个隐式操作 将基本数据转化成对象 字符串的所有方法 都保存在 String prototype 中 所以可以用点语法 例 var re str toUpperCase 隐式操作是 new String str

大家好,我是讯享网,很高兴认识大家。

1. 字符串

1.1 包装对象

点语法只有引用数据可以使用。基本数据调用点语法时,有一个隐式操作,将基本数据转化成对象。字符串的所有方法,都保存在String.prototype中,所以可以用点语法。

例:var re=str.toUpperCase隐式操作是new String(str).toUpperCase,也就是把string包装成一个对象。

案例:

 var str="hello"; str.x=100; //系统自动隐式转换,创建对象 console.log(str.x);//打印undefined var str2=new String();//手动创建对象 str2.x=90; console.log(str2.x); //打印90 function Person(){ }; var p1=new Person(); var p2=new Person(); console.log(p1==p2);//false //p1和p2是两个不同的对象,只是它们的原型对象一样

讯享网

1.2 常用方法:参考W3C

1. 转大写:str.toUpperCase()

2. 转小写:str.toLowerCase()

3. 取单个字符:str[0];当数组来取,通过下标来取

                          str.charAt(0) 

4. str.trim():去掉前导空格和后导空格

5. 取编码:str.charCodeAt(下标)  a:97  A:65

案例:

讯享网 var str="afdQHbdAx"; function fn(str){ var str2=""; for(var i=0;i<str.length;i++){ if(str[i].charCodeAt(0)>=97){ str2+=str[i].toUpperCase() } else{ str2+=str[i].toLowerCase() } } return str2; } var a = fn(str); console.log(a); //AFDqhBDaX
  1. 字符串的截取
    1. str.substring(start:number , end?:number) ?可选,可写可不写

      end默认为到最后一个字符

      包含start,不包含end;取非负数;取负数仍然是从第一个开始截取

                  两个参数可交换位置;

             2. str.substr(from:number , length?:number)

                 length:默认为到最后一个字符

                from:为正,包含; 为负,从后往前数第几个开始截取

                包含length;取非负数;

                两个参数不能交换位置

            3. str.slice(start?:number , end?:number)

               包含start,不包含end,均可正可负

               两个参数不能交换位置,字符串只能从左往右截取

            4. str.split("-")。以-为分界线来剪切。str.split(" "),将字符串转换成数组

案例:

 var str="dgs-dv-wfs-cxzzdf-w"; var arr=str.split("-"); console.log(arr) //['dgs', 'dv', 'wfs', 'cxzzdf', 'w']

经典笔试题:把当前页面地址中的url的参数转化为obj对象

讯享网var str ="http://www.hqyj.com/index.html?uid=123&page=12&dt=04071826&name=jcm";
function fn(str) {
    var arr1 = str.split("?");
    var arr2 = arr1[1].split("&"); //["uid=123","page=12","dt=04071826","name=jcm"]
    var obj = {};
    for (var i = 0; i < arr2.length; i++) {
       var arr3 = arr2[i].split("="); //第一次分割成["uid","123"]  第二次分割成["page","12"]
       obj[arr3[0]] = arr3[1];
       }
       return obj;
     }
var urlobj = fn(str); 
console.log(urlobj); //{uid: '123', page: '12', dt: '04071826', name: 'jcm'}

2. 子串的查找        

        1. str.includes("子串",从哪个字符开始查):返回布尔值 es6

        2. str.indexof("子串",从哪个字符开始查):查找到,返回子串的下标;没查到就返回-1

案例:

 var str = `中新网5月5日电 据秘鲁《公言报》报道,秘鲁总理托雷斯表示,他将于当地时间5月12日出席国会接受质询,对此,他已经做好了一切准备。据报道,托雷斯说:“国会最终可能会对我发起谴责,我现在还不知道,但我将出席国会为所发生的一切作证。”托雷斯将出席国会回答7个问题,要关于政府处理公民**的措施,以及4月5日在利马和Callao进行宵禁的最高法令。托雷斯还表示,他与总统府前秘书长布鲁诺·帕切科举行的会面是在总统卡斯蒂略不知情的情况下进行的,而且没有任何证人,会见的目的是为了查明在帕切科办公室卫生间发现的2万美元的来源。托雷斯说:“他告诉我,那2万美元是他从银行取的,他有银行收据。”`; var FirstStartPosition = str.indexOf("托雷斯"); var SecondStartPosition = str.indexOf("托雷斯", FirstStartPosition + 2); var tls1 = str.substring(FirstStartPosition + 3, SecondStartPosition); console.log(FirstStartPosition, SecondStartPosition); //24 69 var firstWord = str.indexOf("“"); var secondWord = str.indexOf("”"); var tls2 = str.substring(firstWord + 1, secondWord); //document.write(tls2); 在网页上显示 console.log(tls2); //国会最终可能会对我发起谴责,我现在还不知道,但我将出席国会为所发生的一切作证。 

3.字符串的填充 es6

str.padStart(number,""):如果字符串位数不够number,则在开头填充内容,直到满足位数。

str.padEnd():在后面填充

案例:

讯享网 var str="afdQHbdAx"; var str1=str.padStart(15); // 没有第二个参数,默认在字符串前面用空格填充够15位 console.log(str1); // afdQHbdAx var str2=str.padStart(15,"jcm"); console.log(str2); //jcmjcmafdQHbdAx var str3=str.padEnd(15,"jcm"); //在后面填充 console.log(str3); //afdQHbdAxjcmjcm

4. 重复字符串 es6

str.repeat(n)   //将str字符串重复n次,不改变原来的字符串

5. str.startsWith("子串"); //目标字符串是不是以子串开头 返回值为布尔值

str.endWith("子串"); //目标字符串是不是以子串结尾

es6

4和5的案例:

 var str = "hello"; console.log(str.repeat(2)); //hellohello console.log(str); //hello console.log(str.startsWith("h")); //true console.log(str.endsWith("h")); //false console.log(str.endsWith("o")); //true

2. 数组

2.1 基础用法

1. 添加元素

        arr.push(57),原数组后面添加元素,会改变原数组,返回值为数组元素个数

        arr.unshift(57),原数组前面添加元素,会改变原数组

2. 删除元素

        arr.pop(),删除数组最后一个元素,返回值为删除的元素


讯享网

        arr.shift(),删除数组第一个元素,返回值为删除的元素

        arr.splice(从下标几开始删除,删除几个元素,在该位置插入的元素),可以表示前面四个功能,返回值为删除的元素,但不常用。

        arr.slice(开始截取的下标,结束截取的下标),返回值为截取的元素。

案例:

讯享网 var arr = [3,12,1,54,2,13,66]; arr.push(10086); //在数组末尾添加10086 console.log(arr); //[3, 12, 1, 54, 2, 13, 66, 10086] arr.unshift(10087); //在数组开头添加10087 console.log(arr); //[10087, 3, 12, 1, 54, 2, 13, 66, 10086] var re1 = arr.pop(); //删除数组最后一个元素,返回值为删除的元素 console.log(arr); //[10087, 3, 12, 1, 54, 2, 13, 66] console.log(re1); //10086 var re2 = arr.shift(); // 删除数组第一个元素,返回值为删除的元素 console.log(arr); //[3, 12, 1, 54, 2, 13, 66] console.log(re2); //10087 var re3 = arr.splice(2,2,"hi"); //从下标2开始删除,删除两个元素,并在结束位置增加“hi”,返回值是删除的元素 console.log(arr); //[3, 12, 'hi', 2, 13, 66] console.log(re3); //[1,54] var re4 = arr.slice(1,3); //从下标1开始截取,截取到下标3之前,不包括下标3的元素 console.log(arr); //[3, 12, 2, 13, 66] console.log(re4); //[12, 2]

3. 数组转为字符串 arr.join() 

返回值为字符串(将数组的元素用逗号连接,成为一个字符串)

4.反转数组元素 arr.reverse()

返回值为数组,改变原数组

案例:

//数组转为字符串 var arr = [3,12,2,13,66]; var re1 = arr.join(); console.log(re1); //3,12,2,13,66 console.log(typeof(re1)); // string //反转数组 var re2 = arr.reverse(); console.log(arr); //[66, 13, 2, 12, 3] console.log(re2); //[66, 13, 2, 12, 3]

笔试题:判断某个字符串是不是回文

讯享网 var str="雾锁山头山锁雾"; var arr=str.split(""); console.log(arr); var arr1 = arr.reverse(); if(arr1 == arr){ console.log(true); } //true

5. 查找子元素

        arr.indexOf("要查找的元素",从下标几开始查),在数组中查找元素,如果找到,返回该元素的下标;没有,返回-1。

        arr.includes("要查找的元素",从下标几开始查),在数组中查找元素,如果找到,返回true;没有,返回false。

6. 拼接数组 arr.concat(数组名),将数组拼接到arr数组上

案例:

var arr = [4, 534, 32, 36, 72, 6, { age: 66 }]; //语法糖,生成一个数组 var arr2 = [1, 32, 5, 65]; var arr3 = [1, 3, 5, 6]; //查找子元素,找到返回子元素的下标,找不到返回-1 var re1 = arr.indexOf({ age: 66 }); //indexOf()隐式操作,生成了一个新的对象,和arr的原型对象一样,但不是同一个对象 var re2 = arr.indexOf(32); console.log(re1, re2); //-1 2 //查找子元素,找到返回true,找不到返回false var re3 = arr.includes(36); console.log(re3); //true var re4 = arr.includes(50); console.log(re4); //false //拼接数组 var re3 = arr2.concat(arr3, 1, 51); console.log(re3); // [1,32,5,65,1,3,5,6,1,51]

7. 按顺序排列元素

        数组按升序排列:arr.sort(function(n1,n2){ return n2-n1 }

        数组按降序排列:arr.sort(function(n1,n2){ return n1-n2 }

案例:

讯享网var arr = [51,43,78,1,435,4,76,9]; var re = arr.sort(); console.log(re); // [1, 4, 43, 435, 51, 76, 78, 9] //升序 var re1 = arr.sort(function (n1, n2) { return n1 - n2; }); console.log(re1); //[1, 4, 9, 43, 51, 76, 78, 435] //降序 var re2 = arr.sort(function (n1, n2) { return n2 - n1; }); console.log(re2); //[435, 78, 76, 51, 43, 9, 4, 1]

2.2 遍历数组

将数组的每个元素取出来,一遍后面使用

2.2.1 for语句

1. for循环  兼容性最好

2. for-in 兼容性不好,旧浏览器可以。可以遍历对象,但会遍历出原型

for(el in arr){ console.log(el) }  //遍历数组的下标

for(el in arr){ console.log(arr[el]) }   //遍历数组每一个元素

for(el in obj){ console.log(el) }  //遍历对象的成员名

var arr=[1,34,6,3,457,0] var obj={age:123,name:"karen"} for(el in arr){ console.log(el,arr[el]) //遍历数组下标和元素,打印数组下标及元素 } for(el in obj){ console.log(el) //遍历对象的属性名,打印age name } 

2.2.2 arr数组的API(官方提供)

1. arr.map(function(){ } ) ,map会回调函数。调用一次函数,就传一个元素进来,数组有几个元素,就调用几次函数。函数形参可以是多个,返回值为一个新数组。

2. arr.forEach( function(el,index?,arr?){ } )  没有返回值

3.arr. find( function(el,index?,arr?){ if(){ } } ) 搭配if语句,查找满足条件的元素

4. arr.some( function(){ } )只要有元素通过就返回true

5. arr.every( function(){ } )每一个元素都通过就返回true,有不符合的就返回false

6. arr.filter( function(){ } ) 返回筛选通过的元素

案例:

讯享网 var arr=[1, 34, 6, 13, 0]; arr.map(function(el){ console.log(el) }); arr.forEach(function(el) { console.log(el) }); var a=arr.find(function (el){ if(el>13) { return true } }) console.log(a); //34 满足条件的第一个元素 var b=arr.some(function (el){ if(el>13) { return true } }) console.log(b); //true 布尔值 var c=arr.every(function (el){ if(el>13) { return "hi" } }) console.log(c); //false 布尔值 var d=arr.filter(function (el){ if(el>13) { return "hi" } }) console.log(d); // 34

7. reduce 从前往后遍历

array.reduce(callback[,initialValue])

        1. 传了initialValue,那preReturnVal第一次就等于初始值,后续就是上一次的return值(上一次的调用结果)

        2. 没传initialValue,name默认把数组的第一项作为初始值,然后从数组第二项开始循环

        reduce的调用结果:把循环到数组最后一项的调用结果作为reduce的调用结果

应用:数组求和

var arr = [1, 34, 6, 13, 0]; var re = arr.reduce(function (n1, n2) { return n1 + n2; }, 0); console.log(re); //1+34+6+13+0=54 var re2 = arr.reduceRight(function(n1,n2){ console.log(n1,n2); //0 13 13 6 6 34 92 34 1 });

实例:购物车算总价

讯享网 var arr = [{price:1}, {price:34},{price: 6},{price: 13}, {price:0}]; var sum = arr.reduce(function (n1, n2) { return n1 + n2.price; //去对象的price属性值 }, 0); console.log(sum); //1+34+6+13+0=54

8. reduceRight 从后往前遍历。案例看“应用:数组求和”

2.3 es6新提供的功能

Array.of() 将参数中所有值作为元素形成数组

arr.fill( "填充内容" ,从哪里开始填?,从哪里结束填?),修改了原数组  ?表示可写可不写

arr.entries()  遍历键值对,调用结果为一个迭代器对象,可以通过.next()获取到键值对。迭代器对象可以通过for..of来循环取值。

 var arr = [10, 20, 30, 40]; console.log(arr.entries(), 8888); for (const v of arr.entries()) { console.log(v); }

 arr.flat(转几层,默认1层)  数组扁平化,将多维数组降维

讯享网var arr=[[1,2],13,45,[23,4,31],10]; console.log(arr.flat(1)); // [1,2,13,45,23,4,31,10] var arr1 = [[1, [2,0]], 13, 45, [23, [4,22], 31], 10]; console.log(arr.flat(2)); //[1, 2, 0, 13, 45, 23, 4, 22, 31, 10]
小讯
上一篇 2025-01-14 10:59
下一篇 2025-02-28 15:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/54304.html