美文网首页
数组操作汇总

数组操作汇总

作者: 何家一枝花 | 来源:发表于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

    相关文章

      网友评论

          本文标题:数组操作汇总

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