1、Array
构造函数有一个很大的问题,就是不同的参数,会导致它的行为不一致,es6好像专门为此对数组有升级
因此,不建议使用new Array生成新数组,直接使用数组字面量[...]是更好的做法。
2、Array.isArray
方法用来判断一个值是否为数组。它可以弥补typeof
运算符的不足
var a = [1, 2, 3]; typeof a // "object" Array.isArray(a) // true
3、push()和pop() 结合使用,就构成了“后进先出”的栈结构(stack)
push
方法用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度,
pop
方法用于删除数组的最后一个元素,并返回该元素。
4、join()方法以参数作为分隔符,将所有数组成员组成一个字符串返回。如果不提供参数,默认用逗号分隔。
如果数组成员是undefined
或null
或空位,会被转成空字符串
[undefined, null].join(‘#‘) // ‘#‘ [‘a‘,, ‘b‘].join(‘-‘) // ‘a--b‘
通过call
方法,这个方法也可以用于字符串
Array.prototype.join.call(‘hello‘, ‘-‘) // "h-e-l-l-o"
5、concat()方法用于多个数组的合并。返回一个新数组,原数组不变。
concat
也可以接受其他类型的值作为参数。它们会作为新的元素,添加数组尾部。
[1, 2, 3].concat(4, 5, 6) // [1, 2, 3, 4, 5, 6] // 等同于 [1, 2, 3].concat(4, [5, 6]) [1, 2, 3].concat([4], [5, 6])
注意:concat
方法返回当前数组的一个浅拷贝,如果数组中存在复合类型数据(比如对象),原数据改变,数组元素也会随之改变;
let d={a:1} a=a.concat(d) //(8) [{…}, 2, "a", "b", true, 4, 5, {…}] a[7]//{a: 1} d.a=3//3 a[7]//{a: 3}
6、shift()和unshift()
shift
方法用于删除数组的第一个元素,并返回该元素。push
和shift
结合使用,就构成了“先进先出”的队列结构(queue)
unshift
方法用于在数组的第一个位置添加一个或多个元素,并返回添加新元素后的数组长度
var arr = [ ‘c‘, ‘d‘ ]; arr.unshift(‘a‘, ‘b‘) // 4 arr // [ ‘a‘, ‘b‘, ‘c‘, ‘d‘ ]
7、slice()和splice()
slice
方法用于提取原数组的一部分,返回一个新数组,原数组不变。
// 格式 arr.slice(start_index, upto_index); // 用法 var a = [‘a‘, ‘b‘, ‘c‘]; a.slice(0) // ["a", "b", "c"] a.slice(1) // ["b", "c"] a.slice(1, 2) // ["b"] a.slice() // ["a", "b", "c"] ///如果slice方法的参数是负数,则表示倒数计算的位置。 var a = [‘a‘, ‘b‘, ‘c‘]; a.slice(-2) // ["b", "c"] a.slice(-2, -1) // ["b"]
splice
方法用于删除原数组的一部分成员,并可以在被删除的位置添加入新的数组成员,返回值是被删除的元素。
splice
的第一个参数是删除的起始位置,第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。
var a = [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘]; a.splice(4, 2, 1, 2) // ["e", "f"]//从e开始删除2个元素,再插入后面的参数 a // ["a", "b", "c", "d", 1, 2] ///起始位置如果是负数,就表示从倒数位置开始删除。 var a = [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘]; a.splice(-4, 2) // ["c", "d"] ///常见用法,第二个参数给0,在指定位置插入新元素 var a = [1, 1, 1]; a.splice(1, 0, 2) // [] a // [1, 2, 1, 1]
8、reverse()和sort(),之所以两个一起说,是因为二者都是封装了一个常用的遍历算法
reverse
方法用于颠倒数组中元素的顺序,返回改变后的数组。
sort
方法对数组成员进行排序,默认是按照字典顺序排序。数值会被先转成字符串,再按照字典顺序进行比较
sort
方法可以传入一个函数作为参数,表示按照自定义方法进行排序
[ { name: "张三", age: 30 }, { name: "李四", age: 24 }, { name: "王五", age: 28 } ].sort(function (o1, o2) { return o1.age - o2.age;//a>b则调换位置,实现从小到大的排序 }) // [ // { name: "李四", age: 24 }, // { name: "王五", age: 28 }, // { name: "张三", age: 30 } // ]