美文网首页
数组操作汇总

数组操作汇总

作者: 何家一枝花 | 来源:发表于2021-06-11 14:53 被阅读0次

数组

JavaScript的 Array 可以包含任意数据类型,并通过索引来访问每个元素。

要取得 Array 的长度,直接访问 length 属性:

var arr = [ 1 , 2 , 3.14 , 'Hello' , null, true];

arr.length; // 6

请注意 ,直接给 Array 的 length 赋一个新的值会导致 Array 大小的变化:

var arr = [ 1 , 2 , 3 ];

arr.length; // 3

arr.length = 6 ;

arr; // arr变为[1, 2, 3, undefined, undefined, undefined]

arr.length = 2 ;

arr; // arr变为[1, 2]

Array 可以通过索引把对应的元素修改为新的值,因此,对 Array 的索引进行赋值会直接修改这个 Array :

var arr = [ 'A' , 'B' , 'C' ];

arr[ 1 ] = 99 ;

arr; // arr现在变为['A', 99, 'C']

请注意 ,如果通过索引赋值时,索引超过了范围,同样会引起 Array 大小的变化:

var arr = [ 1 , 2 , 3 ];

arr[ 5 ] = 'x' ;

arr; // arr变为[1, 2, 3, undefined, undefined, 'x']

大多数其他编程语言不允许直接改变数组的大小,越界访问索引会报错。然而,JavaScript的 Array 却不会有任何错误。在编写代码时,不建议直接修改 Array 的大小,访问索引时要确保索引不会越界。

indexOf

与String类似, Array 也可以通过 indexOf() 来搜索一个指定的元素的位置:

var arr = [ 10 , 20 , '30' , 'xyz' ];

arr.indexOf( 10 ); // 元素10的索引为0

arr.indexOf( 20 ); // 元素20的索引为1

arr.indexOf( 30 ); // 元素30没有找到,返回-1

arr.indexOf( '30' ); // 元素'30'的索引为2

注意了,数字 30 和字符串 '30' 是不同的元素。

slice

slice() 就是对应String的 substring() 版本,它截取 Array 的部分元素,然后返回一个新的 Array :

var arr = [ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' ];

arr.slice( 0 , 3 ); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']

arr.slice( 3 ); // 从索引3开始到结束: ['D', 'E', 'F', 'G']

注意到 slice() 的起止参数包括开始索引,不包括结束索引。

如果不给 slice() 传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个 Array :

var arr = [ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' ];

var aCopy = arr.slice();

aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G']

aCopy === arr; // false

push和pop

push() 向 Array 的末尾添加若干元素, pop() 则把 Array 的最后一个元素删除掉:

var arr = [ 1 , 2 ];

arr.push( 'A' , 'B' ); // 返回Array新的长度: 4

arr; // [1, 2, 'A', 'B']

arr.pop(); // pop()返回'B'

arr; // [1, 2, 'A']

arr.pop(); arr.pop(); arr.pop(); // 连续pop 3次

arr; // []

arr.pop(); // 空数组继续pop不会报错,而是返回undefined

arr; // []

unshift和shift

如果要往 Array 的头部添加若干元素,使用 unshift() 方法, shift() 方法则把 Array 的第一个元素删掉:

var arr = [ 1 , 2 ];

arr.unshift( 'A' , 'B' ); // 返回Array新的长度: 4

arr; // ['A', 'B', 1, 2]

arr.shift(); // 'A'

arr; // ['B', 1, 2]

arr.shift(); arr.shift(); arr.shift(); // 连续shift 3次

arr; // []

arr.shift(); // 空数组继续shift不会报错,而是返回undefined

arr; // []

sort

sort() 可以对当前 Array 进行排序,它会直接修改当前 Array 的元素位置,直接调用时,按照默认顺序排序:

var arr = [ 'B' , 'C' , 'A' ];

arr.sort();

arr; // ['A', 'B', 'C']

能否按照我们自己指定的顺序排序呢?完全可以,我们将在后面的函数中讲到。

reverse

reverse() 把整个 Array 的元素给掉个个,也就是反转:

var arr = [ 'one' , 'two' , 'three' ];

arr.reverse();

arr; // ['three', 'two', 'one']

splice

splice() 方法是修改 Array 的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素:

var arr = [ 'Microsoft' , 'Apple' , 'Yahoo' , 'AOL' , 'Excite' , 'Oracle' ];

// 从索引2开始删除3个元素,然后再添加两个元素:

arr.splice( 2 , 3 , 'Google' , 'Facebook' ); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite']

arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

// 只删除,不添加:

arr.splice( 2 , 2 ); // ['Google', 'Facebook']

arr; // ['Microsoft', 'Apple', 'Oracle']

// 只添加,不删除:

arr.splice( 2 , 0 , 'Google' , 'Facebook' ); // 返回[],因为没有删除任何元素

arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

concat

concat() 方法把当前的 Array 和另一个 Array 连接起来,并返回一个新的 Array :

var arr = [ 'A' , 'B' , 'C' ];

var added = arr.concat([ 1 , 2 , 3 ]);

added; // ['A', 'B', 'C', 1, 2, 3]

arr; // ['A', 'B', 'C']

请注意 , concat() 方法并没有修改当前 Array ,而是返回了一个新的 Array 。

实际上, concat() 方法可以接收任意个元素和 Array ,并且自动把 Array 拆开,然后全部添加到新的 Array 里:

var arr = [ 'A' , 'B' , 'C' ];

arr.concat( 1 , 2 , [ 3 , 4 ]); // ['A', 'B', 'C', 1, 2, 3, 4]

join

join() 方法是一个非常实用的方法,它把当前 Array 的每个元素都用指定的字符串连接起来,然后返回连接后的字符串:

var arr = [ 'A' , 'B' , 'C' , 1 , 2 , 3 ];

arr.join( '-' ); // 'A-B-C-1-2-3'

如果 Array 的元素不是字符串,将自动转换为字符串后再连接。

对于数组,除了 map() 、 reduce 、 filter() 、 sort() 这些方法可以传入一个函数外, Array 对象还提供了很多非常实用的高阶函数。

every

every() 方法可以判断数组的所有元素是否满足测试条件。

例如,给定一个包含若干字符串的数组,判断所有字符串是否满足指定的测试条件:

'use strict';

 Run

find

find() 方法用于查找符合条件的第一个元素,如果找到了,返回这个元素,否则,返回 undefined :

'use strict';

 Run

findIndex

findIndex() 和 find() 类似,也是查找符合条件的第一个元素,不同之处在于 findIndex() 会返回这个元素的索引,如果没有找到,返回 -1 :

'use strict';

 Run

forEach

forEach() 和 map() 类似,它也把每个元素依次作用于传入的函数,但不会返回新的数组。 forEach() 常用于遍历数组,因此,传入的函数不需要返回值:

'use strict';

 Run

相关文章

  • 数组操作汇总

    数组 JavaScript的Array可以包含任意数据类型,并通过索引来访问每个元素。 要取得Array的长度,直...

  • (八)数组方法

    数组方法汇总 数组拼接为字符串 模拟栈和队列 排序 数组操作 查找item在数组中的位置 迭代方法 归并方法

  • javascript数组操作汇总

    var colors = new Array('red','blue','black'); //检测是否是数组if...

  • javascript-数组操作汇总

    http://gold.xitu.io/entry/57e0d0c97db2a24eb1c7a867

  • 数组操作方法汇总

    常用方法速览: 接下来是比较全的、详细的方法用法 1. Array.from() 该方法从一个类似数组或可迭代对象...

  • Ruby 数组操作方法汇总

    1、数组定义 arr1 = [] arr2 = Array.new arr3 = ['1','2','3'] 2、...

  • js数组方法汇总

    需求: js数组(Array)方法汇总 索引: 对数组方法的学习和汇总,分为三大类: 一,改变原数组的方法(10种...

  • js关于数组的方法汇总

    js关于数组的方法汇总

  • 数组

    数组定义: 元素类型 数组操作 Range 数组的批量操作 遍历

  • 迟到的Swift入门 - 数组操作

    Swift数组操作 1. 数组的日常操作 1.0 声明数组 初始化空数组 初始化默认值的数组 2. 数组基本操作 ...

网友评论

      本文标题:数组操作汇总

      本文链接:https://www.haomeiwen.com/subject/jhcveltx.html