不会改变自身的方法有9种:
1.concat():合并两个或多个数组。不会改变原数组,返回一个新数组
2.includes():判断当前数组是否包含某指定的值,如果是返回true,否则返回false
3.join():连接所有数组元素组成一个字符串
4.slice():抽取当前数组中的一段元素组成一个新数组
5.toString():返回一个有数组元素组合而成的字符串
6.toLocaleString():返回一个有数组元素组合而成的本地化后的字符串
7.indexOf():返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1
8.lastIndexOf():返回数组中最后一个(从右边数第一个)与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1
1.concat():合并两个或多个数组。不会改变原数组,返回一个新数组
/** *方法:concat *作用:合并两个或多个数组。不会改变原数组,返回一个新数组 *语法:var new_arrary = old_array.concat(value1,[, value2[,...[, valueN]]]) *参数:valueN * 将数组和或值连接成新数组。 * 如果省略了valueN的参数,则concat返回一个她所调用的已存在的数组的浅拷贝 *返回值:新的数组 *描述:数组/数值在连接是保持不变。此外,对于数组的任何操作(仅当元素不是对象引用时,)都不会对原始数组产生影响,反之亦然。 */ // 连接2个数组 var alhpa = ['a','b','c'] var numeric = [1,2,3] var newArray = alhpa.concat(numeric) console.log(newArray) // ['a', 'b', 'c', 1, 2, 3] // 连接3个数组 var num1 = [1, 2, 3], num2 = [4, 5, 6], num3 = [7, 8, 9]; var newArray = num1.concat(num2, num3) console.log(newArray) // [1, 2, 3, 4, 5, 6, 7, 8, 9] // 将值链接到数组 var alhpa = ['a','b','c'] var newArray = alhpa.concat(1, [1,2,3]) console.log(newArray) // ['a', 'b', 'c', 1, 2, 3] // 合并嵌套数组 var num1 = [1, 2, 3], num2 = [4, [5, 6]], num3 = [7, [8, 9]]; var newArray_1 = num1.concat(num2) console.log(newArray_1) var newArray_2 = num1.concat(4, num3) console.log(newArray_2) num2[1].push('arr') console.log(newArray_1) // [1, 2, 3, 4, [5, 6]] // [1, 2, 3, 4, 7, [8, 0]] // [1, 2, 3, 4, [5, 6, arr]]
2.includes():判断当前数组是否包含某指定的值,如果是返回true,否则返回false
/** *方法:includes *作用:判断当前数组是否包含某指定的值,如果是返回true,否则返回false *语法:arr.includes(valueToFind[, fromIndex]) *参数:valueToFind 可选 * 使用includes()比较字符串和字符时是区分大小写 * fromIndex 可选 * 从formIndex 索引出开始查找valueToFind。 * 如果是负值,则按升序从array.length + fromIndex 的索引开始搜。默认值为0 *返回值:返回一个布尔值 */ // 计算出来的 fromIndex 小于0 // 如果fromIndex 为负值,则计算出的索引将作为开始搜索元素的位置 // 如果索引小于0,则整个数组都会被搜索 // array length is 3 // fromIndex is -100 // computed index is 3 + (-100) = -97 var arr = ['a','b','c'] var return_1 = arr.includes('a',-100) var return_2 = arr.includes('b',-100) var return_3 = arr.includes('c',-100) // // 3 + (-2)= 1 // // 从索引1开始搜索 var return_4 = arr.includes('a',-2) console.log(return_1) console.log(return_2) console.log(return_3) console.log(return_4) // true // false // true // false
3.join():连接所有数组元素组成一个字符串
/** *方法:join *作用:连接所有数组元素组成一个字符串 *语法:arr.join([separator]) *参数:separator 可选 * 指定一个字符串类分隔数组的每个元素 * 如果需要,将分隔父转换为字符串 * 如果缺省改值,数组元素用逗号(,)分隔。 * 如果 separator 是空字符串(""),则所有元素之间都没有任何字符 *返回值:返回一个所有数组元素连接的字符串 * 如果arr.length为0,则返回空字符串 *描述:所有的数组元素被转换成字符串,再用一个分隔符将这些字符串连接起来 * 如果一个元素为undefined或null,它会被转换为空字符串 */ var arr = ['Wind', 'Rain', 'Fire'] var newVar_1 = arr.join() var newVar_2 = arr.join(',') var newVar_3 = arr.join('+') var newVar_4 = arr.join('-') console.log(newVar_1) console.log(newVar_2) console.log(newVar_3) console.log(newVar_4) // Wind,Rain,Fire // Wind,Rain,Fire // Wind+Rain+Fire // Wind-Rain-Fire // 连接类数组对象 // 通过Array.prototype.join上调用Function.prototype.call function f(a,b,c){ var s= Array.prototype.join.call(arguments) console.log(s) } f(1,'a',true) // 1,a,true
4.slice():抽取当前数组中的一段元素组成一个新数组
/** *方法:slice *作用:抽取当前数组中的一段元素组成一个新数组 *语法:arr.slice([begin[,end]]) *参数:begin 可选 * 提取起始处的索引(从0开始),从索引开始提取原数组元素 * 如果参数为负数,则表示从原数组中的倒数第几个元素开始提取 * slice(-2)表示提取原数组的倒数第二个元素到最后一个元素(包括最后一个元素) * 如果省略begin,则slice从索引0开始 * 如果begin大于原数组的长度,则会返回空数组 * end 可选 * 提前终止的索引(从0开始),在该索引出结束提取原数组元素。slice会提取原数组中 * 索引从begin到end的所有元素(包含begin,但不包含end) * slice(1,4)会提取原数组中从第二个元素开始一直到第四个元素的所有元素(索引为1,2,3的元素) * 如果end被省略,则slice会一直提取到原数组末尾 * 如果end大于数组的长度,slice会一直提取到原数组末尾 *返回值:返回一个含有被提取元素的新数组 *描述:slice 不会修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。 * 原数组的元素按照如下规则拷贝: * 1.如果该元素是个对象引用(不是实际的对象),slice会拷贝这个对象引用到新的数组里 * 两个对象引用都引用了同一个对象。如果被引用的对象发生了改变,则新的和原来的数组中 * 的这个元素也会发生改变 * 2.对于字符串、数字机布尔值来说(不是String、Number或者Boolean对象) * slice会拷贝这些到新的数组里。在别的数组里修改这些字符串或数字或布尔值,将不会影响另一个数组 * 如果向两个数组任一中添加新元素,则另一个不会受到影响 */ var fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'] var citrus = fruits.slice(1, 3) console.log(fruits) console.log(citrus) // ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'] // ['Orange', 'Lemon'] // slice 从myCar中创建了一个数组newCar。 // 两个数组都包含了一个myHonda的对象引用。 // 当myHonda的color属性改变的purple,则两个数组的对应溯源都会随之改变 var myHonda = { color: 'red', wheels: 4, engine: { cylinders: 4, size: 2.2 } } var myCar = [myHonda, 2, "cherry condition", "purchased 1997"] var newCar = myCar.slice(0, 2) // slice 从myCar中创建了一个数组newCar。 // 两个数组都包含了一个myHonda的对象引用。 // 当myHonda的color属性改变的purple,则两个数组的对应溯源都会随之改变 var myHonda = { color: 'red', wheels: 4, engine: { cylinders: 4, size: 2.2 } } var myCar = [myHonda, 2, "cherry condition", "purchased 1997"] var newCar = myCar.slice(0, 2) // 输出 myCar newCar 以及各自myHonda 对象引用的color属性 console.log('myCar = ' + JSON.stringify(myCar)) console.log('newCar = ' + JSON.stringify(newCar)) console.log('myCar[0].color = ' + JSON.stringify(myCar[0].color)); console.log('newCar[0].color = ' + JSON.stringify(newCar[0].color)); // 改变myHonda 对象的color属性 myHonda.color = 'purple' // 输出myCar、newCar中各自的myHonda对象引用的color属性 console.log('The new color of my Honda is ' + myHonda.color); console.log('myCar[0].color = ' + JSON.stringify(myCar[0].color)); console.log('newCar[0].color = ' + JSON.stringify(newCar[0].color)); // The new color of my Honda is purple // myCar[0].color = "purple" // newCar[0].color = "purple"
5.toString():返回一个有数组元素组合而成的字符串
/** *方法:toString *作用:返回一个有数组元素组合而成的字符串。屏蔽了原型上的Object.prototype.toString()方法 *语法:arr.toString() *参数:不需要传参 *返回值:返回一个表示指定的数组及其元素的字符串 *描述: * Array 对象覆盖Object的toString 方法。 * 对于数组对象,toString方法连接数组并返回一个字符串,其中包含用逗号分隔的每个数组元素 * 当一个数组被作为文本值或者进行字符串连接操作时,将会自动调用期toString方法 */ const arr = [1, 2, 'a', '1a'] const arrStr = arr.toString() console.log(arrStr) // 1,2,a,1a
6.toLocaleString():返回一个有数组元素组合而成的本地化后的字符串
/** *方法:toLocaleString *作用:返回一个有数组元素组合而成的本地化后的字符串。屏蔽了原型上的Object.prototype.toLocaleString()方法 *语法:arr.toLocaleString([locals[],options]) *参数: * locals 可选 * 带有BCP 47 标记的字符串或字符串数组 * options 可选 * 一个可配置属性的对象 * 对于数字:Number.prototype.toLocalString() * 对于日期:Date.prototype.toLocalString() *返回值:返回一个数组元素的字符串 */ /** * 数组中的元素将会使用各自的toLocalString方法: * Object:Object.prototype.toLocaleString() * Number: Number.prototype.toLocaleString() * Date: Date.prototype.toLocaleString() * 总是在prices数组中显示字符串和数字的货币符号 */ const arr = [1,'a',new Date()] const arrStr = arr.toLocaleString('en', {timeZone:'UTC'}) console.log(arrStr) // 1,a,5/21/2020, 6:40:12 AM var prices = ['¥7', 500, 8123, 12] var pricesStr = prices.toLocaleString('ja-JP',{style:'currency',currency:'JPY'}) console.log(pricesStr) // ¥7,¥500,¥8,123,¥12
7.indexOf():返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1
/** *方法:indexOf *作用:返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1 *语法:arr.indexOf(searchElement[, formIndex]) *参数: * searchElement 要查找的元素 * formIndex 可选 * 开始找的位置 * 如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回-1 * 如果参数中提供的索引值是一个负值,则将其作为数组末尾的一个抵消,即-1表示从最后一个元素开始查找 * -2表示从倒数第二个元素开始查找。从此类推。注意:如果参数中提供的索引值是一个负值,并不改变查找顺序 * 查找顺序仍然是从前往后查询数组。如果抵消后的索引值仍小于,则整个数组都将会被查询。其默认值为0 *返回值:首个被找到的元素在数组中的索引位置;如果没有找到则返回-1 */ const beats = ['ant', 'bison', 'camel', 'duck', 'bison']; // 返回第一个bison的索引值 1 // 返回第二个bison的索引值 4 // 找不到bi2son这个元素,返回-1 console.log(beats.indexOf('bison')) console.log(beats.indexOf('bison',2)) console.log(beats.indexOf('bi2son')) // 1 // 4 // -1
8.lastIndexOf():返回数组中最后一个(从右边数第一个)与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1
/** *方法:lastIndexOf *作用:返回数组中最后一个(从右边数第一个)与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1 *语法:arr.lastIndexOf(searchElement[, formIndex]) *参数: * searchElement 要查找的元素 * formIndex 可选 * 从这个位置逆向查找 * 默认为数组长度减1(arr.length - 1),即整个数组都被查找 * 如果该值大于或等于数组的长度,则整个数组会被查找 * 如果为负值,将其视为从数组末尾向前的偏移。即使该值为负,数组仍然会被从后向前查找 * 如果该值为负时,其绝对值大于数组长度,则方法返回-1.则数组不会被查找 *返回值:返回数组中该元素最后一次出现的索引,如果未找到则返回-1 */ const animals = ['Dodo', 'Tiger', 'Penguin', 'Dodo']; console.log(animals.lastIndexOf('Dodo')) console.log(animals.lastIndexOf('Penguin')) console.log(animals.lastIndexOf('Tiger')) // 3 // 2 // 1 var arr = [2,5,9,2] var index = arr.lastIndexOf(2) console.log(index) var index = arr.lastIndexOf(7) console.log(index) var index = arr.lastIndexOf(2,3) console.log(index) var index = arr.lastIndexOf(2,2) console.log(index) var index = arr.lastIndexOf(2,-2) console.log(index) var index = arr.lastIndexOf(2,-1) console.log(index) // 3 // -1 // 3 // 0 // 0 // 3 // 查找所有元素 // 使用 lastIndexOf 查找到一个元素在数组中所有的索引(下标),并使用push将所有添加到另一个数组中 var indices = []; var arr = ['a', 'b', 'a', 'c', 'a', 'd']; var element = 'a'; var idx = arr.lastIndexOf(element); while (idx != -1) { indices.push(idx); idx = (idx > 0 ? arr.lastIndexOf(element,idx -1) : -1); } console.log(indices); // 4, 2, 0