1.concat():合并两个或多个数组。不会改变原数组,返回一个新数组
2.includes():判断当前数组是否包含某指定的值,如果是返回 true,否则返回 false
3.join():连接所有数组元素组成一个字符串
4.slice():抽取当前数组中的一段元素组成一个新数组
5.toString():返回一个有数组元素组合而成的字符串
6.toLocaleString():返回一个有数组元素组合而成的本地化后的字符串
7.indexOf():返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1
8.lastIndexOf():返回数组中最后一个(从右边数第一个)与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1
/**
* 方法: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]]
/**
* 方法: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
/**
* 方法: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
/**
* 方法: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"
/**
* 方法: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
/**
* 方法: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
/**
* 方法: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
/**
* 方法: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