加载中...
数组和字符串常用方法
发表于:2021-08-15 | 分类: 前端 js
字数统计: 3k | 阅读时长: 12分钟 | 阅读量:

数组和字符串常用方法


数组常用方法

1. instanceof 运算符

  • instanceof 可以判断一个对象是否是某个构造函数的实例。
let arr = [1, 23];
let obj = {};
console.log(arr instanceof Array); // true
console.log(obj instanceof Array); // false

2. Array.isArray()

  • Array.isArray()用于判断一个对象是否为数组,isArray() 是 HTML5 中提供的方法。
let arr = [1, 23];
let obj = {};
console.log(Array.isArray(arr));   // true
console.log(Array.isArray(obj));   // false

3. 添加删除数组元素的方法

  • 数组中有进行增加、删除元素的方法,部分方法如下表👇
方法名 说明 返回值
puah(参数1 …) 末尾添加一个或多个元素,注意!会修改原数组 返回新数组的长度
pop() 删除数组最后一个元素数组长度减1没有参数、修改原数组 返回删除元素的值
unshift(参数1 …) 向数组头部添加一个或多个元素,注意!会修改原数组 返回新数组的长度
shift() 删除数组头部元素,数组长度减1没有参数、修改原数组 返回从头部删除的元素值
let arr = [1, 2, 3];
console.log(arr.push(4, 5)); // 5 向数组末尾添加元素
arr.pop(); //删除数组最后一个值并返回
console.log(arr); // [1,2,3,4]
    
// 向数组的开头添加元素并返回数组长度 
console.log(arr.unshift(5, 6)); // 6  数组变为[5,6,1,2,3,4]
console.log(arr.shift()); // 5 删除数组开头的元素并返回该值

4. 数组排序

  • 数组中有对数组本身排序的方法,部分方法如下表
方法名 说明 是否修改原数组
reverse() 颠倒数组中元素的顺序,无参数 该方法会改变原来的数组 返回新数组
sort() 对数组的元素进行排序 该方法会改变原来的数组 返回新数组
  • 注意:sort方法需要传入参数(函数)来设置升序、降序排序

    • 如果传入“function(a,b){ return a-b;}”,则为升序
    • 如果传入“function(a,b){ return b-a;}”,则为降序
// 踩坑 数组sort()排序(冒泡排序) return a - b 则升序
// 写法固定 参考如下
let arr1 = [13,4,77,1,7];
arr1.sort(function(a,b){
   return a-b;
});
console.log(arr1);

5. 数组索引方法

方法名 说明 是否修改原数组
indexOf() 数组中查找给定元素的第一个索引 如果存在返回索引号,如果不存在,则返回-1。
lastIndexOf() 从数组最后一个索引向前查找 如果存在返回索引号,如果不存在,则返回-1。
let arr = [1, 2, 3, 4, 5, 4, 1, 2];
// 查找元素2的索引
console.log(arr.indexOf(2)); // 1
// 查找元素1在数组中的最后一个索引
console.log(arr.lastIndexOf(1)); // 

6. 数组转换为字符串

  • 数组中有把数组转化为字符串的方法,部分方法如下表
  • 注意:join方法如果不传入参数,则按照 “ , ”拼接元素
方法名 说明 返回值
toString() 把数组转换成字符串,逗号分割每一项 返回一个字符串
join(‘分隔符’) 方法用于把数组中所有的元素转换为一个字符串 返回一个字符串
let arr = [1, 2, 3, 4];
let arr2 = arr;
let str = arr.toString(); // 将数组转换为字符串
console.log(str); // 1,2,3,4
      
let str2 = arr2.join("|");//按照键入字符将数组转换为字符串
console.log(str2);

7. 其他方法

方法名 说明 返回值
concat() 连接两个或多个数组,不影响原数组 返回一个新的数组
slice(start,end) 截取数组slice(索引号,按照索引号截取不包括最后的索引) 返回被截取项目的新数组
splice() 数组删除splice(start,delete0,替换)第三个参数不做替换可省略 返回被删除元素的新数组 注意,这个会影响原数组
let arr = [1, 2, 3, 4];
let arr2 = [5, 6, 7, 8];
let arr3 = arr.concat(arr2);
console.log(arr3); // [1,2,3,4,5,6,7,8]

// slice(begin,end) 是一种左闭右开区间 [1,3)
// 从索引1出开始截取,到索引3之前
let arr4 = arr.slice(1, 3);
console.log(arr4); // [2,3]

let arr5 = arr2.splice(0, 3);
console.log(arr5); // [5,6,7]
console.log(arr2); // [8]   splice()会影响原数组

数组迭代遍历方法

1. Array.map()

此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变原来的数组。

let arr = [1, 2, 3, 4, 5]
let newArr = arr.map(x => x*2)
//arr= [1, 2, 3, 4, 5]   原数组保持不变
//newArr = [2, 4, 6, 8, 10] 返回新数组

应用场景1

假定有一个数值数组,将数组中的值以双倍的形式放到另一个数组中

let arr = [1,2,3,4,5]
let doubleNumber = arr.map(function(num){
    return num*2
})         
console.log(doubleNumber) //[2,4,6,8,10] 

应用场景2

假定有一个对象数组,将数组中对象的某个属性的值存储到B数组中

let arr = [
            {name:'Jack',age:'16',sex:'男' },
    	    {name:'Jerry',age:'18',sex:'男'},
    	    {name:'Bailey',age:'14',sex:'女'}
        ]
 let names = arr.map(function(name){
            return name.name;
        })
 console.log(names) //  ["Jack", "Jerry", "Bailey"]

总结: map需要返回值,不给return,默认返回undefined map返回一个新的数组 

2. Array.forEach()

此方法是将数组中的每个元素执行传进提供的函数,没有返回值,注意和map方法区分

let arr = [1, 2, 3, 4, 5]
num.forEach(x => x*2)
// arr = [1, 2, 3, 4, 5] 数组改变,注意和map区分

3. Array.filter()

此方法是将所有元素进行判断,将满足条件的元素作为一个新的数组返回

let arr = [1, 2, 3, 4, 5]
const isBigEnough = value => value >= 3
let newArr = arr.filter(isBigEnough )
//newNum = [3, 4, 5] 满足条件的元素返回为一个新的数组

4. Array.every()

此方法是将所有元素进行判断返回一个布尔值,如果所有元素都满足判断条件,则返回true,否则为false:

let arr = [1, 2, 3, 4, 5]
const isLessThan4 = value => value < 4
const isLessThan6 => value => value < 6
arr.every(isLessThan4 ) //false
arr.every(isLessThan6 ) //true

5. Array.some()

此方法是将所有元素进行判断返回一个布尔值,如果存在元素都满足判断条件,则返回true,若所有元素都不满足判断条件,则返回false:

let arr= [1, 2, 3, 4, 5]
const isLessThan4 = value => value < 4
const isLessThan6 = value => value > 6
arr.some(isLessThan4 ) //true
arr.some(isLessThan6 ) //false

6. Array.reduce()

此方法是所有元素调用返回函数,返回值为最后结果,传入的值必须是函数类型:

let arr = [1, 2, 3, 4, 5]
const add = (a, b) => a + b
let sum = arr.reduce(add)
//sum = 15  相当于累加的效果与之相对应的还有一个 Array.reduceRight() 方法,区别是这个是从右向左操作的

字符串常用方法

1. 根据字符返回位置

字符串通过基本包装类型可以调用部分方法来操作字符串,以下是返回指定字符的位置的方法:

方法名 说明
indexOf(‘要查找的字符,开始位置’) 返回指定内容在原字符串中的位置,如果找不到就返回-1,开始的位置是index索引号
lastIndexOf() 从后往前找,只找第一个匹配的
let str = "anndy";
console.log(str.indexOf("d")); // 3
//指定从索引号为4的地方开始查找字符"d"
console.log(str.indexOf("d", 4)); // -1
    
console.log(str.lastIndexOf("n")); // 2

案例:查找字符串”abcoefoxyozzopp”中所有o出现的位置以及次数

  1. 先查找第一个o出现的位置
  2. 然后 只要indexOf 返回的结果不是 -1 就继续往后查找
  3. 因为indexOf 只能查找到第一个,所以后面的查找,利用第二个参数,当前索引加1,从而继续查找
let str = "oabcoefoxyozzopp";
let index = str.indexOf("o");
let num = 0;
while (index !== -1) {
   console.log(index);
   num++;
   index = str.indexOf("o", index + 1);
}

2. 根据位置返回字符

字符串通过基本包装类型可以调用部分方法来操作字符串,以下是根据位置返回指定位置上的字符:

方法名 说明 使用
charAt(index) 返回指定位置的字符(index字符串的索引号) str.charAt(0)
chartCodeAt(index) 获取指定位置字符的ASCLL码值(index索引号) chartCodeAt(0)
str[index] h5新增方法获取指定位置字符 HTML5,IE8+支持和charAt()等效
 // 根据位置返回字符
 // 1. charAt(index) 根据位置返回字符
 let str = 'andy';
 console.log(str.charAt(3)); // y
 // 遍历所有的字符
 for (let i = 0; i < str.length; i++) {
     console.log(str.charAt(i));
 } // a n d y
      
// 2. charCodeAt(index)  
//返回相应索引号的字符ASCII值 目的: 判断用户按下了那个键 
console.log(str.charCodeAt(0)); // 97
// 3. str[index] H5 新增的
console.log(str[0]); // a

3. 字符串操作方法

字符串通过基本包装类型可以调用部分方法来操作字符串,以下是部分操作方法:

方法名 说明
concat(str1,str2,str3 ….) concat()用于连接两个或多个字符串,拼接字符串,等效于+,+更常用
substr(start,length) 从start位置开始(索引号),length截取的个数
slice(start,end) 从start位置开始,截取到end位置不包括end(他们两都是索引号)
substring(start,end) 从start位置开始,截取到end位置不包括end(他们两都是索引号)不接收负数
// 字符串操作方法
// 1. concat('字符串1','字符串2'....)
let str = 'andy';
console.log(str.concat('red')); // andyred

// 2. substr('截取的起始位置', '截取几个字符');
let str1 = '改革春风吹满地';
// 第一个2 是索引号的2 从第几个开始  第二个2 是取几个字符
console.log(str1.substr(2, 2)); // 春风

4. replace()方法

  • replace() 方法用于在字符串中用一些字符替换另一些字符,其使用格式如下:

字符串.replace(被替换的字符串, 要替换为的字符串);

5. split()方法

  • split()方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组。
  • 其使用格式如下:
字符串.split("分割字符")
// 1. 替换字符 replace('被替换的字符', '替换为的字符')  它只会替换第一个字符
let str = "andyandy";
console.log(str.replace("a", "b")); // bndyandy
// 有一个字符串 'abcoefoxyozzopp'  要求把里面所有的 o 替换为 *
let str1 = "abcoefoxyozzopp";
while (str1.indexOf("o") !== -1) {
   str1 = str1.replace("o", "*");
}
console.log(str1); // abc*ef*xy*zz*pp

// 2. 字符转换为数组 split('分隔符')    
// 前面我们学过 join 把数组转换为字符串
let str2 = "red, pink, blue";
console.log(str2.split(",")); //[red,pink,blue]
let str3 = "red&pink&blue";
console.log(str3.split("&")); // [red,pink,blue]

6. match(regexp)方法

根据正则表达式在字符串中搜索匹配项。如果没有找到匹配项,则返回一个信息数组或null

//match(regexp) //select integers only
let intRegex = /[0-9 -()+]+$/;  
 
let myNumber = '999';
let myInt = myNumber.match(intRegex);
console.log(isInt);
//output: 999
 
let myString = '999 JS Coders';
let myInt = myString.match(intRegex);
console.log(isInt);
//output: null

7. search(regexp)方法

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,如果找到,返回与 regexp 相匹配的子串的起始位置,否则返回 -1

//search(regexp)
let intRegex = /[0-9 -()+]+$/;  
 
let myNumber = '999';
let isInt = myNumber.search(intRegex);
console.log(isInt);
//output: 0

8. toLowerCase()方法

toLowerCase() 方法用于把字符串转换为小写。

//toLowerCase()
let myString = 'JAVASCRIPT ROX';
myString = myString.toLowerCase();
console.log(myString)
//output: javascript rox

9. toUpperCase()方法

toUpperCase() 方法用于把字符串转换为大写。

//toUpperCase()
let myString = 'javascript rox';
myString = myString.toUpperCase();
console.log(myString)
//output: JAVASCRIPT ROX

10. includes()方法

includes() 方法用于检查字符串是否包含指定的字符串或字符。

//includes()
let mystring = "Hello, welcome to edureka";
let n = mystring.includes("edureka");
//output: True

11. trim()方法

trim() 方法会从一个字符串的两端删除空白字符。在这个上下文中的空白字符是所有的空白字符 (space, tab, no-break space 等) 以及所有行终止符字符。

//trim()
let str = "Hello Edureka!";
alert(str.trim());
上一篇:
vue的生命周期
下一篇:
MVC和MVVM
本文目录
本文目录