数组方法整理

数组方法

  • 是否为数组
    • Array.isArray(param)
    • 如果param是 Array,则为true; 否则为false。
  • 数组转字符串
    • join
      • join(separator)
      • 以separator为分隔符,省略的话则用默认用逗号为分隔符
      • 可以实现重复字符串,实质是在n+1个空字符串之间加入要重复的字符串 function repeatString(str, n) { return new Array(n + 1).join(str) } console.log(repeatString("abc", 3)) // abcabcabc
      • 不影响原数组
  • 增删改数组
    • splice(start,length[,params])
      • 删除:
        • 参数:要删除的第一项的位置和要删除的项数。
        • 例如, splice(0,2)会删除数组中的前两项。
      • 插入:
        • 参数:起始位置0要删除的项数)和要插入的项。
        • 例如,splice(2,0,4,6)会从当前数组的位置 2 开始插入4和6。
      • 替换:
        • 参数:起始位置要删除的项数要插入的任意数量的项
        • 插入的项数不必与删除的项数相等。
        • 例如,splice (2,1,4,6)会删除当前数组位置 2 的项,然后再从位置 2 开始插入4和6。
      • 返回值为一个数组,该数组中包含从原始数组中删除的项,如果没有删除任何项,则返回一个空数组
    • push()
      • 接收任意数量的参数,将它们逐个添加到数组尾部
      • 返回值是修改后的数组长度
    • pop()
      • 数组尾部移除最后一项
      • 返回值是被移除的项
    • shift()
      • 移除数组第一项
      • 返回值为被移除的项
      • 数组为则返回undefined
    • unshift()
      • 接收任意数量的参数,将他们添加到数组头部
      • 返回值是修改后的数组长度
    • 对比push和unshift多参数情况 可以把参数看做一个整体,按原有顺序放到数组的头(尾)部
      • push
        • let arr = [4,5,6]
        • arr.push(7,8,9) // arr=[4,5,6,7,8,9]
      • unshift
        • let arr =[4,5,6]
        • arr.unshift(1,2,3) // arr=[1,2,3,4,5,6]
  • 数组排序
    • sort()
      • sort()方法会调用每个数组项的 toString()转型方法,然后比较得到的字符串,以确定如何排序。
      • 即使数组中的每一项都是数值, sort()方法比较的也是字符串。 var arr1 = ["a", "d", "c", "b"]; console.log(arr1.sort()); // ["a", "b", "c", "d"] arr2 = [13, 24, 51, 3]; console.log(arr2.sort()); // [13, 24, 3, 51] (这里转换成字符串作比较,所以相当于每个字符串的第一位进行比较,即[1,2,5,3]。排序后变成[1,2,3,5],即[13,24,3,51],所以个位数比较不会出现这种问题) console.log(arr2); // [13, 24, 3, 51] (原数组被改变)
      • sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数。 升序: arr.sort(function(a,b){ return a-b ​​})​ 降序: ​​arr.sort(function(a,b){ return b-a ​​})​
    • reverse()
      • 反转数组项的顺序。
  • 数组拼接
    • concat()
      • 将参数添加到原数组中。
      • 这个方法会先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组
      • 在没有给 concat()方法传递参数的情况下,它只是复制当前数组并返回副本。
      • 传入的不是数组,则直接把参数添加到数组后面,如果传入的是数组,则将数组中的各个项添加到数组中
      • 不影响原数组
  • 数组切割
    • slice(start[,end])
      • 返回从原数组中指定开始下标结束下标之间的项组成的新数组,但不包括结束位置的项。
      • 在只有一个参数的情况下, slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。
      • 不影响原数组
  • 数组搜索
    • indexOf()和 lastIndexOf()
      • 参数:要查找的项和(可选的)表示查找起点位置的索引。可以是负数,它代表相对于数组末尾的个数。最后一个元素是-1,倒数第二个元素为-2,以此类推...
      • 参数为NaN时返回-1,所以不能搜索数组中的NaN。
      • 这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1
      • 比较参数和数组项时,会使用全等操作符。
      • 不影响原数组
    • find()和findIndex() (es6)
      • 在数组内部, 找到第一个符合条件的数组成员。 arr.find((value, index, arr) => { ​return value > 4 }) ​value:每一次迭代查找的数组元素。 index:每一次迭代查找的数组元素索引。 arr:被查找的数组
      • find()函数,找到就返回该元素,找不到返回undefined。
      • findIndex()函数,找到就返回元素的位置,找不到就返回-1
      • 可以搜索NaN的位置。 arr.findIndex((value)=>{ ​ return Object.is(NaN,value) ​})
      • 不影响原数组
    • includes() (es7)
      • 表示某个数组是否包含给定的值,与字符串的includes()方法类似
      • 第一个参数表示要查找的数,第二个参数表示搜索的起始位置,返回一个布尔值
      • 推荐使用这个而不是indexOf()因为后者会对NaN造成误判。 arr.includes(NaN)​
      • 不影响原数组
  • 数组归并
    • reduce()和 reduceRight()
      • 参数:每一项上调用的函数和(可选的)作为归并基础的初始值
      • 回调函数参数:前一个值当前值、项的索引数组对象
      • reduce()从数组的第一项开始,逐个遍历到最后。
      • reduceRight()从数组的最后一项开始,向前遍历到第一项。
      • 空数组上,不带初始值参数调用将会报错。
      • 如果只有一个元素且没有指定初始值,或者空数组指定了一个初始值,reduce()只是简单地返回那个值而不会调用化简函数
      • 函数返回的任何值都会作为第一个参数自动传给下一项。
      • 数组求和(数组一开始加了一个初始值10)。 arr.reduceRight(function(prev, cur, index, array){ return prev + cur; ​},10)
      • 不影响原数组
  • 数组迭代
    • 都不影响原数组
    • forEach()
      • 对数组中的每一项运行给定函数。
      • 函数参数:元素索引数组本身
      • 没有返回值
    • map()
      • 返回每次函数调用的结果组成的数组
    • filter()
      • 返回满足过滤条件组成的数组。
    • every()
      • 判断数组中每一项都是否满足条件。
      • 只有所有项都满足条件,才会返回true。
      • 若有一个参数为false,则返回,忽略执行后面的参数。
    • some()
      • 判断数组中是否存在满足条件的项。
      • 只要有一项满足条件,就会返回true。
      • 若有一个参数为true, 则返回, 忽略执行后面的参数。
  • 数组成员复制
    • copyWithin() (es6)
      • 在数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员)。
      • 参数:
      • target(必须): 从该位置开始替换数据
      • start(可选):从该位置开始读取原数组数据
      • end(可选):复制到该位置的前一个位置截止
      • [1, 2, 3, 4, 5, 6].copyWithin(2) // [1, 2, 1, 2, 3, 4]
      • [1, 2, 3, 4, 5, 6].copyWithin(2,1) // [1, 2, 2, 3, 4, 5]
      • [1, 2, 3, 4, 5, 6].copyWithin(2,1,4) // [1, 2, 2, 3, 4, 6]
  • 数组填充
    • fill(value[,start[,end]]) (es6)
      • 将一个固定值替换数组的元素(会覆盖原有成员)。
      • value必需。填充的值。
      • start可选。开始填充位置。
      • end可选。停止填充位置 (默认为 array.length),填充至指定位置前一个。
      • [a,b,c,d].fill('e') // [e,e,e,e]
      • [a,b,c,d].fill('e',2) // [a,b,e,e]
      • [a,b,c,d].fill('e',2,3) // [a,b,e,d]
  • 其他值转化成数组
    • Array.from(arrayLike[, mapFn[, thisArg]]) (es6)
      • 将部署了Iterator接口的对象,比如:Set,Map,Array;和类数组对象转换成数组。类数组对象,就是一个对象必须有length属性没有length,转出来的就是空数组
      • arrayLike:被转换的的对象。
      • mapFn:map函数。用来对每个元素进行处理,将处理后的值放入返回的数组。
      • thisArg:map函数中this指向的对象。
      • 兼容写法 if (!Array.from) { Array.from = function(obj) { return [].slice.call(obj) } }​
    • Array.of()
      • 将一组值转化为数组。
      • 参数:无或无限(无时返回一个空数组)。
      • 兼容写法 if (!Array.of) { Array.of = function() { return Array.prototype.slice.call(arguments) } }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏lzj_learn_note

3-序列、列表、元组

序列就是一堆数据元素的集合,并对每个元素进行编号。在Python中,字符串、列表、元组都属于序列,他们都具有一些特定的操作,如索引、切片、相加、相乘、in、长度...

1163
来自专栏简书专栏

Python正则表达式re库的使用

re.search函数需要传入2个参数,第1个参数是正则表达式,第2个参数是要进行搜索的源字符串。 re.search函数返回结果的数据类型是sre.SRE_...

1832
来自专栏JavaEE

redis学习之redis基本数据类型前言:数据类型详解:

1143
来自专栏软件开发 -- 分享 互助 成长

C++ 隐式类型转换

C++定义了一组内置类型对象之间的转换标准,在必要的时候它们被编译器隐式的转换 1、任何两种或多种类型的数据和变量混合操作的时候,最宽的数据类型成为目标转换类型...

2327
来自专栏尾尾部落

[剑指offer] 数组中重复的数字

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复...

993
来自专栏Laoqi's Linux运维专列

python3–元祖+列表+字典

3104
来自专栏测试开发架构之路

C++之类和对象的使用(三)

对象数组 如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供。Student stud[3]={90,92,01};//合法 如果构造函数...

3419
来自专栏Java成长之路

多态易错题

①②③比较好理解,一般不会出错。④⑤就有点糊涂了,为什么输出的不是”B and B”呢?!!先来回顾一下多态性。

1062
来自专栏深度学习计算机视觉

java正则表达式详解

正则表达式用于指定字符串的模式,你可以任何需要定位使用匹配某种特定模式的字符串的情况下使用正则表达式 jdk1.4推出java.util.regex包,就为我们...

2884
来自专栏猿人谷

static_cast ,reinterpret_cast

用法:static_cast < type-id > ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查...

22810

扫码关注云+社区

领取腾讯云代金券