JavaScript 数组对象和字符串对象的方法

186 阅读11分钟

数组对象

数组类型检测

数组类型检测有两种常用的方式,分别是使用instanceof运算符和使用Array.isArray()方法。

示例:

var arr = [];
var obj = {};

// 第一种方式
console.log(arr instanceof Array);//输出结果:true
console.log(arr instanceof Array);//输出结果:false

// 第二种方式
console.log(Array.isArray(arr));//输出结果:true
console.log(Array.isArray(obj));//输出结果:false

添加或删除数组元素

JavaScript数组对象提供了添加或删除元素的方法,可以实现在数组的末尾或开头添加新的数组元 素,或在数组的末尾或开头移出数组元素。方法如下:

方法名功能描述返回值
push(参数1...)数组末尾添加一个或多个元素,会修改原数组返回数组的新长度
unshift(参数1...)数组开头添加一个或多个元素,会修改原数组返回数组的新长度
pop()删除数组的最后一个元素,若是空数组则返回undefifined,会修改原数组返回删除的元素
shift()删除数组的第一个元素,若是空数组则返回undefifined,会修改原数组返回第一个元素的值返回第一个值

示例:

// push
var arr = ['pink', 'black', 'white', 'yellow']
console.log(arr.push('red'));// 返回的是数组长度 输出结果为:5
console.log(arr);// 修改了原来的数组 输出结果为['pink', 'black', 'white','yellow','red']

// unshift
var arr = ['pink', 'black', 'white', 'yellow']
console.log(arr.unshift('red', 'blue'));// 返回的是数组长度 输出结为:6
console.log(arr);// 修改了原来的数组 输出结果为['red', 'blue', 'pink','black','white', 'yellow']

// pop
var arr = ['pink', 'black', 'white', 'yellow']
console.log(arr.pop());// 返回的是删除的元素 输出结果为:yellow
console.log(arr);// 修改了原来的数组 输出结果为['pink', 'black','white']

// shift
var arr = ['pink', 'black', 'white', 'yellow']
console.log(arr.shift());// 返回的是删除的元素(第一个) 输出结果为:pink
console.log(arr);// 修改了原来的数组 输出结果为['pink', 'black','white']

注意:

  • push()和unshift()方法的返回值是新数组的长度,而pop()和shift()方法返回的是移出的数组元素

数组排序

JavaScript数组对象提供了数组排序的方法,可以实现数组元素排序或者颠倒数组元素的顺序等。

排序方法如下:

方法功能描述
reverse()颠倒数组中元素的位置,该方法会改变原数组,返回新数组
sort()对数组的元素进行排序,该方法会改变原数组,返回新数组

示例:

var arr = ['red', 'blue', 'green']
console.log(arr.reverse());//输出的结果为:['green', 'blue', 'red']
console.log(arr);// 改变原数组['green', 'blue', 'red']



// sort: 如果调用该方法时没有使用参数,按照字符编码的顺序进行排序。
var arr1 = [1, 4, 5, 6, 73, 32, 22, 15];
// 不传参数的情况
console.log(arr1.sort());//输出的结果为:[1, 15, 22, 32, 4, 5, 6, 73]

// 传参数:参数是用来指定按某种顺序进行排列的函数
/*即 a 和 b 是两个将要被比较的元素:*/
arr1.sort(function (a, b) {
// return b - a;//降序 // [73, 32, 22, 15, 6, 5, 4, 1]
return a - b;//升序 // [1, 4, 5, 6, 15, 22, 32, 73]
})
console.log(arr1);

数组索引

在开发中,若要查找指定的元素在数组中的位置,可以利用Array对象提供的检索方法。检索方法如下:

方法功能描述
indexOf()返回在数组中可以找到给定值的第一个索引,如果不存在,则返回-1
lastIndexOf()返回指定元素在数组中的最后一个的索引,如果不存在则返回-1

示例代码:

indexOf()

  • -- 参数1:要查找的元素
  • -- 参数2:开始查找的位置
  • -- 注意: 如果第二个参数是-1 表示从最后一个元素开始查找,-2 表示从倒数第二个元素开始查找,以此类推。
var beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];
console.log(beasts.indexOf('bison'));
// 输出结果为: 1

// 找到第二个bison的索引
console.log(beasts.indexOf('bison', 2));
// 输出结果为: 4

console.log(beasts.indexOf('giraffe'));
// 输出结果为: -1

lastIndexOf()

  • -- 如果该值大于或等于数组的长度,则整个数组会被查找。
  • -- 如果为负值,将其视为从数组末尾向前的偏移。即使该值为负,数组仍然会被从后向前查找。
  • -- 如果该值为负时,其绝对值大于数组长度,则方法返回 -1,即数组不会被查找。
var animals = ['Dodo', 'Tiger', 'Penguin', 'Dodo'];
console.log(animals.lastIndexOf('Dodo'));
// 输出结果为: 3

console.log(animals.lastIndexOf('Tiger'));
// 输出结果为: 1

注意:

  • 默认都是从指定数组索引的位置开始检索,并且检索方式与运算符“===”相同,即只有全等时才会返回比较成功的结果。

数组转换为字符串

在开发中,可以利用数组对象的join()和toString()方法,将数组转换为字符串。方法如下:

方法功能描述
toString()把数组转换为字符串,逗号分隔每一项
join('分隔符')将数组的所有元素连接到一个字符串中

示例代码:

// toString
var arr = ['a', 'b', 'c']
console.log(arr.toString());// 输出结果为:a,b,c

// join
console.log(arr.join());// 输出结果为:a,b,c
console.log(arr.join(''));// 输出结果为:abc
console.log(arr.join('-'));// 输出结果为:a-b-c

其他方法

JavaScript还提供了很多其他常用的数组方法。例如,填充数组、连接数组、截取数组元素等。方法如下:

方法功能描述
fill()用一个固定值填充数组中指定下标范围内的全部元素
splice()通过删除或替换现有元素或者原地添加新的元素来修改数组,返回被删除项目的新数组
slice()数组截取,参数为slice(begin, end),包含 begin ,但不包含 end ,返回被截取项目的新数组
conccat()连接两个或多个数组,不影响原数组,返回一个新数组

注意:

  • slice()和concat()方法在执行后返回一个新的数组,不会对原数组产生影响,剩余的方法在执行后皆会对原数组产生影响。 示例代码:

fill

// fill
const array1 = [1, 2, 3, 4];
// 填充0,从数组索引2(包含)开始到4(不包含)结束
console.log(array1.fill(0, 2, 4));
// 输出结果为: Array [1, 2, 0, 0]

// 填充5,从数组索引1(包含)开始
console.log(array1.fill(5, 1));
// 输出结果为: Array [1, 5, 5, 5]

// 填充6
console.log(array1.fill(6));
// 输出结果为: Array [6, 6, 6, 6]

splice

// 从索引 2 的位置开始删除 0 个元素,插入“小红”
var myFish = ["小米", "小明", "小张", "小李"];
var removed = myFish.splice(2, 0, "小红");
console.log(myFish);
console.log(removed);// 运算后的 myFish: ["小米", "小明", "小红", "小张", "小李"]

// 被删除的元素:[], 没有元素被删除

// 从索引 2 的位置开始删除 0 个元素,插入“小刚”和 "小蔡"
var myFish = ["小米", "小明", "小张", "小李"];
var removed = myFish.splice(2, 0, '小刚', '小蔡');
console.log(myFish);
console.log(removed);
// 运算后的 myFish: ["小米", "小明", "小刚", "小蔡", "小张", "小李"]

// 被删除的元素:[], 没有元素被删除

// 从索引 3 的位置开始删除 1 个元素
var myFish = ["小米", "小明", "小刚", "小蔡", "小张", "小李"];
var removed = myFish.splice(3, 1);
console.log(myFish);
console.log(removed);
// 运算后的 myFish: ['小米', '小明', '小刚', '小张', '小李']
// 被删除的元素:['小蔡']

// 从索引 2 的位置开始删除 1 个元素,插入“小兰”
var myFish = ["小米", "小明", "小刚", "小蔡", "小张", "小李"];
var removed = myFish.splice(2, 1, "小兰");
console.log(myFish);
console.log(removed);
// 运算后的 myFish: ['小米', '小明', '小兰', '小蔡', '小张', '小李']
// 被删除的元素:["小刚"]

// 从索引 0 的位置开始删除 2 个元素,插入"小兰"、"小蔡"和"小刚"
var myFish = ["小米", "小明", "小张", "小李"];
var removed = myFish.splice(0, 2, '小兰', '小蔡', '小刚');
console.log(myFish);
console.log(removed);
// 运算后的 myFish: ['小兰', '小蔡', '小刚', '小张', '小李']
// 被删除的元素:['小米', '小明']

// 从索引 2 的位置开始删除 2 个元素
var myFish = ['小兰', '小蔡', '小刚', '小张', '小李'];
var removed = myFish.splice(myFish.length - 3, 2);
console.log(myFish);
console.log(removed);
// 运算后的 myFish: ['小兰', '小蔡', '小李']
// 被删除的元素: ['小兰', '小蔡']

// 从索引 2 的位置开始删除所有元素
var myFish = ['小兰', '小蔡', '小刚', '小张', '小李'];
var removed = myFish.splice(2);
console.log(myFish);
console.log(removed);
// 运算后的 myFish: ['小兰', '小蔡']
// 被删除的元素:['小刚', '小张', '小李']

slice

// 从索引 2 的位置开始截取
var array3 = ['小兰', '小蔡', '小刚', '小张', '小李'];
var getArr = array3.slice(2);
console.log(array3);
console.log(getArr);
// 运算后的 array3:['小兰', '小蔡', '小刚', '小张', '小李'];
// 被截取的元素: ['小刚', '小张', '小李']

// 从索引 2 的位置开始 截取到 索引4 的位置(包含2 不包含4)
var array3 = ['小兰', '小蔡', '小刚', '小张', '小李'];
var getArr = array3.slice(2, 4);
console.log(array3);
console.log(getArr);
// 运算后的 array3:['小兰', '小蔡', '小刚', '小张', '小李'];
// 被截取的元素: ['小刚', '小张']

// 从索引 2 的位置开始 截取到 数组的倒数第一个元素(不包含)
var array3 = ['小兰', '小蔡', '小刚', '小张', '小李'];
var getArr = array3.slice(2, -1);
console.log(array3);
console.log(getArr);
// 运算后的 array3:['小兰', '小蔡', '小刚', '小张', '小李'];
// 被截取的元素: ['小刚', '小张']

// 截取后两个元素
var array3 = ['小兰', '小蔡', '小刚', '小张', '小李'];
var getArr = array3.slice(-2);
console.log(array3);
console.log(getArr);
// 运算后的 array3:['小兰', '小蔡', '小刚', '小张', '小李'];
// 被截取的元素: ['小张', '小李']

concat

// 连接两个数组
const letters = ['a', 'b', 'c'];
const numbers = [1, 2, 3];
const concatArr = letters.concat(numbers);
console.log(letters);//['a', 'b', 'c']
console.log(concatArr);//['a', 'b', 'c', 1, 2, 3]

// 连接三个数组
const num1 = [1, 2, 3];
const num2 = [4, 5, 6];
const num3 = [7, 8, 9];
const numArr = num1.concat(num2, num3);
console.log(numArr);//[1, 2, 3, 4, 5, 6, 7, 8, 9]

// 将值连接到数组
const arr1 = ['a', 'b', 'c'];
const newArr1 = letters.concat(1, [2, 3]);
console.log(newArr1);//['a', 'b', 'c', 1, 2, 3]

字符串对象

字符串对象的使用

字符串对象使用new String()来创建,在String构造函数中传入字符串,这样就会在返回的字符串对象中保存这个字符串。

语法:

var str = new String('送你一朵小红花')
console.log(str)
console.log(str.length);//输出结果为:7

// 看不到常见的属性和方法
var str1 = '送你一朵小红花'
console.log(str1)

根据字符返回位置

字符串对象提供了用于检索元素的属性和方法,字符串对象的常用属性和方法如下:

方法功能描述
indexOf('要查找的值','开始的位置')返回指定内容在原字符串中的位置, 如果找不到就返回 -1;开始的位置是index 索引号;参数2可选,规定在字符串中开始检索的位置。它的合法取值是 0stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。
lastIndexOf('要查找的值','开始的位置')从后往前找,只找第一个匹配的,如果没有找到匹配字符串则返回 -1;参数2可选,规定在字符串中开始检索的位置。它的合法取值是 0 到stringObject.length - 1。如省略该参数,则将从字符串的最后一个字符处开始检索。

示例代码:

// indexOf:参数1:要搜索的子字符串;参数2:可选
var str = new String('送你一朵小红花,送你一朵小红花');

// 查找 花 首次出现的位置
var res = str.indexOf('花');

// 查找 花 从第七个位置查找 花 ,第一次出现的位置
var res2 = str.indexOf('花', 7);

console.log(str);
console.log(str.length);//7
console.log(res);//输出结果:6
console.log(res2);//输出结果:14

// lastIndexOf:参数1:要搜索的子字符串;参数2:可选

var str1 = new String('to be or not to be');

// 查找 e 从最后一个字符开始,第一次出现的位置
var res1 = str1.lastIndexOf('e');

// 查找 e 从第8个位置开始倒数,第一次出现的位置
var res3 = str1.lastIndexOf('e', 8);

console.log(str1);
console.log(str1.length);//15
console.log(res1);//输出结果:17
console.log(res3);//输出结果:4

根据位置返回字符

字符串对象提供了用于获取字符串中的某一个字符的方法。方法如下:

成员作用
charAt(indext)获取index位置的字符,位置从0开始计算
charCodeAt(index)获取index位置的字符的ASCII码
str(index)获取指定位置处的字符(HTML5新增)和charAt等效

示例代码:

var str = 'andy';

// 获取index位置的字符
console.log(str.charAt(0));//输出的结果为;a

// 获取index位置的字符的ASCII码
console.log(str.charCodeAt(0));//输出结果为:97(a的ASCII码是97)
for (var i = 0; i < str.length; i++) {
// 获取指定位置处的字符
console.log(str[i]);
}

字符串操作方法

字符串对象提供了一些用于截取字符串、连接字符串、替换字符串的属性和方法。字符串对象的常用属性和方法如下:

方法作用
concat(str1,str2...)concat() 方法用于连接两个或多个字符串。拼接字符串,等效于+,+更常用该方法没有改变原有字符串,会返回连接两个或多个字符串新字符串。
slice(star,end)截取从start位置到end(不包含end)位置之间的一个子字符串可提取字符串的某个部分,并以新的字符串返回被提取的部分
substring(star,end)截取从start位置到end位置之间的一个子字符串,基本和slice相同,但是不接收负值
substr(star,length)截取从start位置开始到length长度的子字符串从起始索引号提取字符串中指定数目的字符
toLowerCase()获取字符串的小写形式
toUpperCase()获取字符串的大写形式
split(separator,limit)使用separator分隔符将字符串分隔成数组,limit用于限制数量separator可选。
replace(str1,str2)使用str2替换字符串中的str1,返回替换结果,只会替换第一个字符

示例:

var str = 'HelloWord';

// concat
var res = str.concat('!!');
console.log(res);//HelloWord!!

// slice
var res1 = str.slice(1, 5);
console.log(res1); //ello

// substring
var res2 = str.substring(3);//截取从下标为3开始,之后的内容
console.log(res2);//loWord
var res3 = str.substring(3, 7);//截取从下标为3开始,到7结束的内容(不包含7)
console.log(res3);//loWo

// substr
var res4 = str.substr(2, 5);
console.log(res4);//lloWo

// toLowerCase
var res5 = str.toLocaleLowerCase();
console.log(res5);//helloword

// toUpperCase
var res6 = str.toLocaleUpperCase();
console.log(res6);//HELLOWORD

// split
var str1 = 'How are you doing today?'
var res7 = str1.split(' ');
console.log(res7);// ['How', 'are', 'you', 'doing', 'today?']
var res8 = str1.split();
console.log(res8);//['How are you doing today?']
var res9 = str1.split(' ', 3);
console.log(res9);// ['How', 'are', 'you']

// replace
var res10 = str1.replace(' ', ',');
console.log(res10);//How,are you doing today?