JavaScript原生数组Array常用方法

push方法和pop方法, 可以使数组的行为类似于栈, 先进后出, 并且推入和弹出操作只发生在一端.

push方法

push方法可以接收一个或多个参数, 把它们追加到数组末尾, 并返回修改后数组的长度.

var arr = ['a', 'b', 'c', 'd', 'e']; var temp = arr.push('f'); console.info('temp: ' + temp); // temp: 6 console.info(arr); // ["a", "b", "c", "d", "e", "f"] temp = arr.push('g', 'h'); console.info('temp: ' + temp); // temp: 8 console.info(arr); // ["a", "b", "c", "d", "e", "f", "g", "h"]

合并两个数组

我们可以通过Array.prototype.push.apply()来合并两个数组, 示例如下:

var arr1 = ['a', 'b', 'c'], arr2 = ['x', 'y', 'z']; var temp = Array.prototype.push.apply(arr1, arr2); console.info(arr1); // ["a", "b", "c", "x", "y", "z"] console.info(arr2); // ["x", "y", "z"] console.info(temp); // 6

pop方法

pop方法是将数组的最后一项移除, 将数组长度减1, 并返回移除的项.

var arr = ['a', 'b', 'c', 'd', 'e']; var temp = arr.pop(); console.info('temp: ' + temp); // temp: e console.info('length: ' + arr.length); // length: 4

如果在一个空数组上使用pop方法, 则返回undefined

队列方法

队列的访问规则是先进先出, 并且队尾添加项, 队头移除项. push方法和shift方法结合使用, 就可以像操作队列一样操作数组.

shift方法

shift方法将移除数组的第一项, 将数组长度减1, 并返回移除的项.

var arr = ['a', 'b', 'c', 'd', 'e']; var temp = arr.shift(); console.info('temp: ' + temp); // temp: a console.info('length: ' + arr.length); // length: 4

unshift方法

相反地, 还有一个unshift方法, 它的用途与shift方法相反
unshift也可以在接收一个或多个参数, 把它们依次添加到数组的前端, 并返回修改后数组的长度.

var arr = ['a', 'b', 'c', 'd', 'e']; var temp = arr.unshift('x', 'y', 'z'); console.info('temp: ' + temp); // temp: 8 console.info(arr); // ["x", "y", "z", "a", "b", "c", "d", "e"]

重排序方法

sort方法和reverse方法

sort方法和reverse方法是可以直接用来重排序的两个方法.
其中, reverse方法是用来反转数组的.

var arr = [1, 3, 2, 5, 4]; arr.reverse(); console.info(arr); // [4, 5, 2, 3, 1]

关于sort方法, 默认情况下, 它是对数组的每一项进行升序排列, 即最小的值在前面. 但sort方法会调用toString方法将每一项转成字符串进行比较(字符串通过Unicode位点进行排序), 那么这种比较方案在多数情况下并不是最佳方案. 例如:

var arr = [1, 3, 2, 5, 4]; arr.sort(); console.info(arr); // [1, 2, 3, 4, 5] arr = [1, 5, 10, 20, 25, 30]; arr.sort(); console.info(arr); // [1, 10, 20, 25, 30, 5]

因此, sort方法可以接收一个比较函数作为参数, 由我们来决定排序的规则. 比较函数接收两个参数, 如果第一个参数小于第二个参数(即第一个参数应在第二个参数之前)则返回一个负数, 如果两个参数相等则返回0, 如果第一个参数大于第二个参数则返回一个正数, 例如:

var arr = [1, 5, 10, 20, 25, 30]; arr.sort(function(value1, value2){ if(value1 < value2) { return -1; } else if(value1 > value2) { return 1; } else { return 0; } }); console.info(arr); // [1, 5, 10, 20, 25, 30]

操作方法

concat方法

concat方法可以将多个数组合并成一个新的数组. concat可以接收的参数可以是数组, 也可以是非数组值.

var arr1 = ['a', 'b', 'c'], arr2 = ['x', 'y', 'z'], val = 'hello'; var temp = arr1.concat(val, arr2); console.info('arr1: ' + arr1); // arr1: a,b,c console.info('arr2: ' + arr2); // arr2: x,y,z console.info('val: ' + val); // val: hello console.info('temp: ' + temp); // temp: a,b,c,hello,x,y,z

concat方法并不操作原数组, 而是新创建一个数组, 然后将调用它的对象中的每一项以及参数中的每一项或非数组参数依次放入新数组中, 并且返回这个新数组.

concat方法并不操作调用它的数组本身, 也不操作各参数数组, 而是将它们的每个元素拷贝一份放到新创建的数组中. 而拷贝的过程, 对于对象类型来说, 是将对象引用复制一份放到新数组中, 而对于基本类型来说, 是将其值放到新数组中.

slice方法

slice方法可以基于源数组中的部分元素, 对其进行浅拷贝, 返回包括从开始到结束(不包括结束位置)位置的元素的新数组.

var arr = ['a', 'b', 'c', 'd', 'e']; var temp1 = arr.slice(), temp2 = arr.slice(1), temp3 = arr.slice(1, 2); console.info(arr); // ["a", "b", "c", "d", "e"] console.info(temp1); // ["a", "b", "c", "d", "e"] console.info(temp2); // ["b", "c", "d", "e"] console.info(temp3); // ["b"]

从示例中可以看出:

slice方法并没有操作原数组, 而是创建了一个新的数组.

当没有传参数给slice方法时, 则返回从索引0开始拷贝的新数组.

传入一个参数, 如: arr.slice(1), 表示从索引1位置开始拷贝, 一直到原数组的最后一个元素.

传入两个参数, 如: arr.slice(1, 2), 表示从索引1位置开始拷贝, 一直拷贝到位置2但不包括位置2上的元素.

参数如果为负数, 表示从数组最后面的元素可以算起.

slice方法同样不操作调用它的数组本身, 而是将原数组的每个元素拷贝一份放到新创建的数组中. 而拷贝的过程, 也于concat方法相同.

splice方法

splice方法可以用途删除或修改数组元素. 它有如下几种用法:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwyzpy.html