本文主要介绍的方法主要有以下几个,这几个方法都不会改变原来的数组。
- Array.prototype.concat()
- Array.prototype.join()
- Array.prototype.slice()
- Array.prototype.toString()
- Array.prototype.indexOf()
- Array.prototype.lastIndexOf()
1、Array.prototype.concat()
concat()方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本,返回一个新的数组。该数组是通过把所有的arrayX参数添加到arryaObject中生成的,如果要进行concat()操作的参数是数组,那么添加的是数组中的元素,而不是数组。
语法:var newArray = oldArray.concat([element1, element2, element3, ..., elementN]);
说明:
- concat()函数并不会改变原来数组中的元素,但是会返回一个新的数组。
- 对于数组中含有对象引用,concat()函数只是进行浅复制(shallow copy),即新数组和原来数组都是指向同一个对象。也就是说,一旦指向的对象被修改,则原来数组和新数组中相应的元素都会发生变化。
- 对于字符串和数值则是直接复制到新数组中。
例子:
var arr1 = ['a', 'b', 'c'], arr2 = [1, 2, 3];
var newArr1 = arr1.concat(arr2);
console.log(newArr1); //result: ['a', 'b', 'c', 1, 2, 3]
var num1 = [1, 2, 3], num2 = [4, 5, 6], num3 = [7, 8, 9];
var nums = num1.concat(num2, num3);
console.log(nums); //result: [1, 2, 3, 4, 5, 6, 7, 8, 9]
//指向对象引用
var obj = {name: "Louis", age: 23};
var objArr = [obj];
var newArr = objArr.concat();
console.log(objArr[0].age); //result: 23
console.log(newArr[0].age); //result: 23
obj.age = 24;
console.log(objArr[0].age); //result: 24
console.log(newArr[0].age); //result: 24
2、Array.prototype.join()join()方法用于把数组中的所有元素方法如一个字符串,元素之间是通过指定的分隔符进行分隔的。
语法:array.join([delimiter]),delimiter是可选的,在返回字符串中用于分割字符串的字符。如果省略,将使用空字符("")。如果delimiter是零长度字符串,则在同一列表中列出全部项,没有分界符。
返回:返回一个字符串。
例子:
var a = ['Wind', 'Rain', 'Fire'];
var myVar1 = a.join(); // print: 'Wind,Rain,Fire'
console.log(myVar1);
var myVar2 = a.join(' , '); // print: 'Wind, Rain, Fire'
console.log(myVar2);
var myVar3 = a.join(' + '); // print: 'Wind + Rain + Fire'
console.log(myVar3);
var myVar4 = a.join(''); // print: 'WindRainFire'
console.log(myVar4);
3、Array.prototype.slice()
slice()方法返回一个新的数组,新的数组是原来数组的部分浅复制(shadlow copy)。
语法:array.slice(startIndex[,endIndex])
startIndex: 当没有传入该参数则默认为0;如果传入的是负数,则加上数组长度;
endIndex: 当没有传入该参数则默认是数组的长度(arr.length);如果传入的是负数,则加上数组的长度。
说明:需要注意的是截取的数组中不包括endIndex位置处的元素,即从startIndex到endIndex-1。对于对象引用,跟Array.prototype.concat()函数一样。
例子:
var color = ['red', 'green', 'black', 'pink', 'blue'];
var subColor = color.slice(1, 3); // print:['green', 'black']
console.log(subColor);
4、Array.prototype.toString()
toString()方法将数组组成一个字符串,并返回字符串。
语法:array.toString()
说明:与array.join()方法得到的字符串一样。
例子:
var a = ['Wind', 'Rain', 'Fire'];
var myVar1 = a.toString(); // print: 'Wind,Rain,Fire'
console.log(myVar1);
var myVar2 = a.join(); // print: 'Wind,Rain,Fire'
console.log(myVar2);
5、Array.prototype.indexOf()该方法从数组(由前往后,即从0到arr.length-1顺序)找查找某个元素,如果能找到则返回第一个相同元素在数组中的位置;如果
没能找到则返回-1。
语法:arr.indexOf(searchElement[, fromIndex = 0])
searchElement: 要在数组中查找的元素;
fromIndex: 从某个位置开始查找,如果没有该参数则默认为0;如果fromIndex大于或者等于数组的长度,则直接返
回-1;如果fromIndex小于0,则加上数组的长度,从结果值的位置开始查找,如果结果值还是小于0,则是整个数组查找。
例子:
var array = [2, 5, 9];
console.log(array.indexOf(2));// 0
console.log(array.indexOf(7));// -1
console.log(array.indexOf(9, 2));// 2
console.log(array.indexOf(9, 3));// -1
console.log(array.indexOf(2, -1));// -1
console.log(array.indexOf(2, -3));// 0
//找到数组中某个元素的所有位置
var array = ['a', 'b', 'a', 'c', 'a', 'd'];
var searchElement = 'a';
var indexArr = [];
var index = array.indexOf(searchElement);
while(index != -1){
indexArr.push(index);
index = array.indexOf(searchElement, index + 1);
}
console.log(indexArr);
6、Array.prototype.lastIndexOf()
从数组中查找指定的元素,如果存在则返回该元素第一次出现在数组中的位置,否则返回-1。需要注意的是查找的方向是从数组
尾部往前,即arr.length到0。
语法:arr.lastIndexOf(searchElement[, fromIndex = arr.length - 1])
searchElement: 要查找的值
fromIndex: 如果没有传入该参数则默认为arr.length数组长度;如果传入的数值大于或等于数组的长度,则对整个数组都进行查找;如果传入的是负数,则加上数组的长度,从结果值处开始查找,如果结果值还是负数则直接返回-1;需要注意的是对于有传入fromIndex,是从fromIndex处开始往前查找。
例子:
var array = [2, 5, 9, 2];
console.log(array.lastIndexOf(2)); // 3
console.log(array.lastIndexOf(7)); // -1
console.log(array.lastIndexOf(2, 3)); // 3
console.log(array.lastIndexOf(2, 2)); // 0 注意结果不是 3
console.log(array.lastIndexOf(2, -2)); // 0
console.log(array.lastIndexOf(2, -1)); // 3