常用的JS数组对象API

ES5及以前的Api

  1. ECMAScript5为数组定义了5个迭代方法,每个方法接收两个参数, 一个是每项运行的函数,一个是运行该函数的作用域对象(可选项),传入这些方法的函数会接收三个参数:数组项的值,该项在数组中的位置,数组对象本身。
//  1. Array.every()
//  全真为真  
//  示例用途:全选+单选逻辑
const number = [1, 2, 3, 4, 5]
const result = number.every((item,index,array)=>{
  return item > 0
})
console.log(result) // true

//  2. Array.some()
//  一真为真,与every()相反  
//  示例用途:用于检测数组中是否有满足条件的项
const number = [1, 2, 3, 4, 5]
const result = number.some((item,index,array)=>{
  return item > 2
})
console.log(result) // true

//  3. Array.filter()
//  数据筛选,返回 条件成立的项组成的数组
//  示例用途: 可以适用于 前端的搜索功能
const number = [1, 2, 3, 4, 5]
const result = number.filter((item,index,array)=>{
  return item > 2
})
console.log(result) // [3, 4, 5]

//  4. Array.map()
//  对数组中的每一项运行改定的函数,返回每次函数调用的结果组成的数组
//  示例用途:for循环遍历操作数组中的每一项。
const number = [1, 2, 3, 4, 5]
const result = number.map((item,index,array)=>{
  return item * index
})
console.log(result) // [0, 2, 6, 12, 20]

//  5. Array.forEach()
//  对数组中的每一项运行改定的函数,这个方法没有返回值
//  示例用途:for循环遍历操作数组中的每一项。
const number = [1, 2, 3, 4, 5]
const result = number.forEach((item,index,array)=>{
   item * index
})
console.log(result) // [0, 2, 6, 12, 20]

  1. 归并方法 reduce()

    // 示例:实现数组元素累加求和
    const number = [1, 2, 3, 4, 5]
    const result = number.reduce((prev,next,index,array) => {
      return prev + next
    })
    console.log(result) // 15
  • 回调函数的参数:
  • accumulate:  前一项,
  • currentValue: 后一项,
  • currentIndex:  项的索引(如果有初始值,从0开始,否则从1开始)
  • arry: 数组对象
  1. 语法: array.reduce(callBack(accumulate,currentValue,currentIndex,array),initialValue)
  2. 概念: 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
  3. initialValue: (可选参数)作为归并基础的初始值
  4. reduce() 可以作为一个高阶函数,用于函数的 compose。
  5. 注意: reduce() 对于空数组是不会执行回调函数的。

reduceRight() 方法的功能和 reduce() 功能是一样的, 不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加。

数组变异方法(含义:改变原数组本身,并且不需要重新赋值给原数组)

  //  1.  默认排序顺序为按字母升序
  const array1 = [6, 8, 4, 3, 5, 7, 9, 11, 2]
  array1.sort()

  console.log(array1) // [11, 2, 3, 4, 5, 6, 7, 8, 9]

  //  2.  若要按照number形式进行排序,需要传一个函数作为参数
  const array1 = [6, 8, 4, 3, 5, 7, 9, 11, 2]
  array1.sort((a, b)=>{
    // return b - a  // 降序
    return a - b  // 升序
  })

  console.log(array1) // [2, 3, 4, 5, 6, 7, 8, 9, 11]

  //  3.  随机排序
  const array1 = [6, 8, 4, 3, 5, 7, 9, 11, 2]
  array1.sort((a, b)=>{
    return Math.random() > 0.5 ? -1 : 1
  })

  console.log(array1) // [4, 9, 8, 5, 6, 2, 7, 11, 3]
  const array = [1, 2, 3, 4, 5]
  console.log(array.join())     //  1,2,3,4,5
  console.log(array.join(""))   //  12345
  console.log(array.join("-"))  //  1-2-3-4-5
  const array = [1, 2, 3, 4, 5]
  array.reverse()
  console.log(array)  //  [5, 4, 3, 2, 1]
// 1. 传一个参数时,从当前位置开始,一直删除到最后,返回被删除元素所组成的数组
  const array1 = [1, 2, 3, 4, 5]
  const result = array1.splice(1)
  console.log(result) // [2, 3, 4, 5]
  console.log(array1) // [1]

// 2. 传两个参数时,从下标为 1 位置开始删除,删除 2 个 返回被删除元素所组成的数组
  const array2 = [1, 2, 3, 4, 5]
  const result = array2.splice(1 , 2)
  console.log(result) // [2 ,3]
  console.log(array2) // [1 ,4, 5]

// 3. 传三个参数时,从下标为 1 位置开始删除,删除 2 个 
// ,用1替换被删除的元素 返回被删除元素所组成的数组
  const array3 = [1, 2, 3, 4, 5]
  const result = array3.splice(1 , 2 , 1)
  console.log(result) // [2 ,3]
  console.log(array3) // [1, 1, 1, 4, 5]
  • array.splice(start,deleteCount,items)
    这个方法很 :ox: :beer: 能对数组进行增删改, 返回一个新的数组
  • array.reverse()   倒序操作
  • array.join()      将数组按照特定的连接方式转换为字符串
  • array.push()       在数组末尾添加一个或多个元素,返回数组的长度
  • array.pop()        删除数组末尾的一个元素,返回被删除的元素
  • array.unshift()    在数组头部添加一个或多个元素,返回数组的长度
  • array.shift()      删除数组头部的一个元素,返回被删除的元素
  • array.indexOf()    查找数组元素,找到返回下标,找不到返回 -1
  • array.sort()       数组排序

数组非变异方法 (含义:不改变原数组本身,需要重新赋值给原数组)

  const arr1 = [1, 2, 3]
  const arr2 = [-1, -2, -3]
  const arr3 = [11, 22, 33]
  console.log(arr1.concat(arr2, arr3)) // [1, 2, 3, -1, -2, -3, 11, 22, 33]
  const arr1 = [1, 2, 3, 4, 5, 6]

  //  传两个参数,包括开始,不包括结束
  const result = arr1.slice(0, 5)
  console.log(result) // [1, 2, 3, 4, 5,]

  //  传一个参数,slice(n)---> 从当前项到数组的最后一项截取
  const result = arr1.slice(1)
  console.log(result) // [2, 3, 4, 5, 6]

  //  参数为负数:表示 arr1.length + 负数
  //  或者理解为倒序截取
  const result = arr1.slice(-5, -2)
  console.log(result) //  [2, 3, 4,]

  // 原数组
  console.log(arr1)   //  [1, 2, 3, 4, 5, 6]
  • arr.slice(start, end)     数组截取
  • arr.concat(arr1, arr2)    组合数组

ES6

  1. Array.from()

    //  概念: 将伪数组转成真正的数组,将伪数组对象或可遍历对象转换为真数组
        const arrayLike = {0: 'a', 1: 'b', 2: 'c', length: 3}
        const arr1 = Array.from(arrayLike)
        console.log(arr1)             //  ['a','b','c']

    // 当然也可以用Es6之前的方法
        const arr2 = Array.protoype.slice.call(arrayLike)
        console.log(Array.from(arr2)) //  ['a','b','c']
  2. Array.of()

    //  将一系列数据生成一个数组
        const arr1 =  new Array(3)
        console.log(arr1)   //  [empty × 3]

        const arr2 =  new Array(3,4)
        console.log(arr2)   //  [3,4]

        const arr3 =  Array.of(3)
        console.log(arr3)   //  [3]
  3. Array.isArray(obj)

    //  判断变量是否为数组
        console.log(Array.isArray([]))              //  true
        console.log(Array.isArray([1]))             //  true
        console.log(Array.isArray(new Array()))     //  true
        console.log(Array.isArray(Array.prototype)  //  true
  4. 拓展运算:...

    //  数组的展开操作
        const arr1 = [1,2,3]
        const arr2 = [...arr1]
        arr2.push(4)
        console.log(arr2)   //  [1,2,3,4]

    //  函数定义的时候 等同于 argument的作用 ...变量名 得到真正的数组
        function foo(...arr) {
          console.log(...a)  //  数组的展开操作 11 22 33
          foo1.apply(null,a)
        }

        function foo1(a,b,c) {
          console.log(a,b,c) //   11 22 33
        }
        foo(11,22,33)
  5. Array.find((item,index,arry)=>{})

    //  查找,第一个符合条件的数组成员,如果没有找到,返回undefined
        const arr  = [1,2,3,4,5,6]
        const arr1 = arr.find((item,index,arry)=>{
            // return item return  item > 1
        })//  console.log(arr1) // undefinedconsole.log(arr1) // 2
  6. Array.findIndex((item,index,arry)=>{})

    //  查找,第一个符合条件的数组成员,返回其下标,没有找到则返回 -1 
        const arr  = [1,2,3,4,5,6]
        const arr1 = arr.findIndex((item,index,arry)=>{
            // return item return  item > 3
        })//  console.log(arr1) // -1console.log(arr1) // 4
  7. Array.includes(searchElement[,fromIndex = 0])

    //  概念:找到返回true , 找不到返回 false (可以和数组的filter方法搭配使用)
    //  参数:(要找的元素[,开始查找的索引])
    //  从该索引处开始查找 searchElement。 如果为负值。则按升序从
    //  array.length + fromIndex 的索引开始搜索。默认为0

        const arr  = [1,2,3,4,5,6]

        const arr1 = arr.includes(3)
        console.log(arr1) //  true

        const arr2 = arr.includes(3,-1)
        // 从下标 6 - 1 = 5 开始查找3
        console.log(arr2) //  false

        const arr3 = arr.includes(3,-10)
        // 从下标 6 - 10 = -4 
        // 如果计算出的索引小于 0 , 则整个数组都会被搜索
        console.log(arr3) //  true

Javascript 数组对象常用的API的更多相关文章

  1. JavaScript 数组对象常用属性

    concat() 用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. var a = ["aa","ccc"]; var b ...

  2. javascript数组对象排序

    javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...

  3. JavaScript数组对象常用方法

    JavaScript数组对象常用方法 方法 形式 返回值 是否改变原数组 描述 concat -items: ConcatArray[] 追加之后的数组 否 连接两个或更多的数组,并返回结果.注意 c ...

  4. 了解JavaScript 数组对象及其方法

    数组在我目前学习过的编程语言中都可以见到, 形形色色的方法也数不胜数, 不过功能都一样, 最多也就是方法名稍稍有所不同, 老外也没个准啊, 如果英语比较好的同学对于学习方法(method)来说是很快的 ...

  5. JavaScript数组对象详情

    Array 数组概述 Array 类型是 ECMAScript 最常用的类型.javaScript 中的 Array 类型和其他语言中的数组有着很大的区别. 虽然数组都是有序排列,但 javaScri ...

  6. JavaScript 数组对象的去重

    JavaScript数组去重 1.原型去重法.通过prototype找到数组的源性对象Array,在数组的原型上添加unique()方法.需要使用的时候使用 点 " . " 进行连 ...

  7. javascript 数组对象及其方法

    数组声明:通过let arr = new Array(); 或者 let arr = []; 数组对象可调用的方法: 1)find方法,使用情况是对数组进行筛选遍历,find方法要求某个函数(A)作为 ...

  8. javascript 数组的常用操作函数

    join() Array.join(/* optional */ separator) 将数组转换为字符串,可带一个参数 separator (分隔符,默认为“,”). 与之相反的一个方法是:Stri ...

  9. javascript数组对象

    constructor属性 返回数组对象原型 var arr = [1,2,3,4,5]; arr.constructor //输出 function Array() { [native code] ...

随机推荐

  1. eclipse查看jar包源代码

    方法一:将jd-gui集成在Eclipse中 https://jingyan.baidu.com/article/b24f6c8275536686bfe5daed.html    下载2个反编译文件, ...

  2. 菜鸡的Java笔记 comparator 比较器

    1.数组操作类: Arrays        2.两种比较器的使用: Comparable Comparator        3.实现二叉树算法            content (内容)   ...

  3. Python介绍和安装

    python介绍和安装 目录 python介绍和安装 1. Python简介 2. 解释器 2.1 Python解释器的种类 2.2 Python解释器版本 3. Windows下安装Python 3 ...

  4. 第02章_MySQL环境搭建

    第02章_MySQL环境搭建 1. MySQL的卸载 步骤1:停止MySQL服务 在卸载之前,先停止MySQL8.0的服务.按键盘上的"Ctrl + Alt + Delete"组合 ...

  5. 大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构 @推荐与计算广告系列

    作者:韩信子@ShowMeAI,Joan@腾讯 地址:http://www.showmeai.tech/article-detail/tencent-ctr 声明:版权所有,转载请联系平台与作者并注明 ...

  6. 31、下一个排列 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(31)下一个排列 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "双指针法 ...

  7. Redis 很屌,不懂使用规范就糟蹋了

    这可能是最中肯的 Redis 使用规范了 码哥,昨天我被公司 Leader 批评了. 我在单身红娘婚恋类型互联网公司工作,在双十一推出下单就送女朋友的活动. 谁曾想,凌晨 12 点之后,用户量暴增,出 ...

  8. 【GS应用】基因组选择在杂交玉米上的应用示例

    目录 GS两步走 示例 缩短周期和成本 分类 杂交类型 试验研究 选择响应 选择的强度 选择的周期 预测能力 数据分析的注意事项 GS实施 优缺点 GS的成功 展望 GS两步走 示例 缩短周期和成本 ...

  9. [源码解析] PyTorch 分布式 Autograd (5) ---- 引擎(上)

    [源码解析] PyTorch 分布式 Autograd (5) ---- 引擎(上) 目录 [源码解析] PyTorch 分布式 Autograd (5) ---- 引擎(上) 0x00 摘要 0x0 ...

  10. Kubernetes主机间cluster ip时通时不通

    1.问题现象 测试部署了一个service,包括2个pod,分别在node1和node2上. $ kubectl get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) ...