数组 (Array)

1. 作用:

Array 对象用于在单个的变量中存储多个值

2. 概念:

a.下标 -- 编号,从 0 开始,到 (长度-1) 结束,索引

b.元素 -- 数组中存放数据的空间

c.长度 -- 数组中存放数据的个数

3. 创建数组对象:

   a.  var array = []; // 使用直接量的方式创建b.  var array = new Array(); // 使用构造函数创建// 创建的同时添加数组元素c.  var array = [value1, value2, value3, ...]; d.  var array = new Array(value1, value2, value3, ...);e.  var array = new Array(size);  // size 表示指定数组长度
复制代码

4. 引用数组元素:

数组名[下标] --> arr[0]

-- 下标以数字0开始

5. 遍历数组元素:

a. 普通循环

   for (var i = 0; i < array.length; i++) {// array[i]}
复制代码

b. for - in

   for (var i in array) { // i 表示数组下标的字符串内容,比如下标为 0,那i就是"0", i 表示数组下标的字符串内容,比如下标为 0,那i就是"0"// array[i]}// 拓展:使用for - in 遍历对象属性for (var attrName in obj) { // attrName 表示对象属性名var value = obj[attrName]; // obj[attrName] 表示对象属性值}
复制代码

c. for - of

ES6 新增语法,学习可参考: developer.mozilla.org/zh-CN/docs/…

7. 常用数组API总结

length属性 -- 获取数组长度

push() -- 将一个或多个元素添加到数组的末尾,并返回新数组的长度。该方法和 call() 或 apply() 一起使用时,可应用在类数组的对象上。

unshift() -- 将一个或多个元素添加到数组的开头,并返回新数组的长度。

splice() -- 指定索引处添加/删除

           // 第二个参数为0时做添加arrayObject.splice(index, 0, item1,.....,itemX)// 第二个参数不是0则做删除arrayObject.splice(index, howmany, item1,.....,itemX)
复制代码

     -- 注意:添加/删除元素都会动态改变数组长度及数组下标

pop() -- 从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。

shift() -- 从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。

reverse() -- 反转,将数组中元素的位置颠倒。

sort(sortBy) -- 排序(升序,默认字符串Unicode编码顺序)。

     sortBy : 可选排序函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

     -- 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

     -- 若 a 等于 b,则返回 0。

     -- 若 a 大于 b,则返回一个大于 0 的值。

   // 简单的栗子:升序排列数字数组function sortNumber(a,b) {return a - b;}
复制代码

concat() -- 数组连接,返回值为新数组

     var arrNew = arr1.concat(arr2);

join() -- 连接数组元素,返回字符串,默认使用 ,(逗号) 连接数组元素

slice(start, end)

     -- 截取 start 开始到 end 结束之间的数组元素,省略 end 表示截取到数组末尾。

     -- 包括开始索引处元素,但不包括结束索引处元素。

     -- start,end 也可以取负值

     -- 返回新数组,不影响原数组

toString()

     -- 返回一个字符串,表示指定的数组及其元素。

     -- 该字符串由数组中的每个元素的 toString() 返回值经调用 join() 方法连接(由逗号隔开)组成。

8. 数组排序算法(了解):

冒泡排序

   -- A. 相邻两个元素比较,按升序(降序)排序,如果相邻两个元素不满足排序规则,则交换顺序。

   -- B. 会经过多轮的排序,每轮会经过多次排序,通常规则是:轮数 + 当前轮比较次数 == 元素个数

   -- c. 二重循环,外层控制比较的轮数,内层控制每轮比较的次数,外层循环 N-1,内层循环 N-1-i (N表示数组长度,i表示外层循环变量,外/内层循环变量都从0开始)

       for(let i = 0; i < len-1; i++){for(let j = 0; j < len-1-i; j++){if(arr[j] < arr[j+1]){var mid = arr[j+1];arr[j+1] = arr[j];arr[j] = mid;}}}
复制代码

**选择排序插入排序快速排序顺序查找二分查找......**

9. 数组ES5-ES6新增API

Array.isArray(arr)

  -- 判断 arr 是否为数组

  拓展: 其他判断 arr 是否为数组的方法

  -- Object.prototype.toString.call(arr)

  -- arr instanceof Array

arrayObject.forEach(callback)

  -- 对数组的每个元素执行一次提供的函数

  -- callback(currentValue, index, array)

currentValue : 数组中遍历到的当前值

index : 当前值在数组中的下标

array : 调用 forEach() 方法的数组

注意: 没有返回一个新数组! 没有返回值!

arrayObject.map(callback)

  -- 对数组的每个元素执行一次提供的函数后返回其结果。

  -- 返回一个新数组,由所有返回的结果组成。

           var newarr = arr1.map(callback)
复制代码

arrayObject.some(callback)

  -- 测试数组中的某些元素是否通过由提供的函数实现的测试。

       [2, 5, 8, 1, 4].some(function(curr){return curr 9;}) // false[2, 5, 8, 1, 4].some(function(curr){return curr 7;}) // true
复制代码

arrayObject.every(callback)

  -- 测试数组的所有元素是否都通过了指定函数的测试。和some()一样用法

arrayObject.filter(callback)

  -- 返回一个新数组, 其包含通过所提供函数实现的测试的所有元素。

       [2, 5, 8, 1, 4].filter(function(curr){return curr > 4;}) // [5,8]
复制代码

arrayObject.indexOf(searchElement[, fromIndex])

  -- 查找数组中某元素第一次出现的索引

  -- 返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

       [2, 5, 8, 1, 4].indexOf(8)  // 2[2, 5, 8, 1, 4].indexOf(8,3) // -1,因为从索引 3 开始,找不到8
复制代码

arrayObject.lastIndexOf()

  -- 查找数组中某元素最后一次出现的索引,不传参数返回-1

       [2,5,4,6,5,8,7,6,5].lastIndexOf(5) // 8
复制代码

arrayObject.reduce(callback,initialValue) -- 归并

  -- 对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。

  -- callback(accumulator,curr,currIndex,array)

  -- accumulator 累加器,累加回调的返回值; 它是上一次调用callback时返回的累积值

  -- 提供初始值通常更安全

arrayObject.reduceRight() -- 从右到左

       [2, 5, 8, 1, 4].reduce((a,b) => a+b) // 20 == 2 + 5 +8 + 1 + 4;[2, 5, 8, 1, 4].reduce((a,b) => a-b) // -16 == 2 - 5 - 8 - 1 -4;[2, 5, 8, 1, 4].reduce((a,b) => a*b) // 320 == 2*5*8*1*4;// 计算数组中元素出现的次数arr1.reduce(function(accumulator,curr){if(curr in accumulator)accumulator[curr]++;elseaccumulator[curr] = 1;return accumulator;},{})// 数组去重let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];let result = arr.sort().reduce((init, current)=>{if(init.length===0 || init[init.length-1]!==current){init.push(current);}return init;}, []);console.log(result); //[1,2,3,4,5]更多案例 : [https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)
复制代码

Array.from()

  --从一个类似数组或可迭代对象中创建一个新的数组。

  -- 伪数组对象(拥有一个 length 属性和若干索引属性的任意对象)

  -- 可迭代对象(可以获取对象中的元素,如 Map和 Set 等)

       let newArr = Array.from(arr);
复制代码

arrayObject.fill() -- 方法用一个固定值填充一个数组。

       arr.fill(0)// [0,0,0,0,...]复制代码

JavaScript常用内置对象之Array相关推荐

  1. JavaScript常用内置对象

    JavaScript中的对象分为3种:内置对象.浏览器对象.自定义对象 JavaScript提供多个内置对象:Math/Array/Number/String/Boolean... Math对象 Ma ...

  2. javascript常用内置对象总结(重要)

    Javascript对象总结 JS中内置了17个对象,常用的是Array对象.Date对象.正则表达式对象.string对象.Global对象  Array对象中常用方法:  Concat():表示把 ...

  3. JavaScript 常用内置对象(字符串属性、Math对象、Array数组对象)

    1.字符串属性 <script> var test_var = "I Iove you"; console.log(test_var.charAt(3)) //char ...

  4. javascript中内置对象简介、Array

    内置对象: javascript的三种对象:1.内置对象-JavaScript自带的对象:2.自定义对象-自己定义构造函数创建对象:3.浏览器对象- BOM时候介绍,几个常用内置对象:Math Dat ...

  5. JavaScript之基础-9 JavaScript String(内置对象、String概述、字符串常用操作、模式匹配)...

    一.JavaScript 内置对象 内置对象 - 什么是内置对象? 内置对象就是ECMAScript标准中已经定义好的,由浏览器厂商已经实现的标准对象 - 内置对象中封装了专门的数据和操作数据常用的A ...

  6. JavaScript的常用内置对象

    JavaScript的常用内置对象 Math对象 Math对象的使用 练习 日期对象 日期对象的使用 日期对象的常用get方法 日期对象的常用set方法 练习 数组对象 数组类型检测 添加或删除数组元 ...

  7. 前端JavaScript(2) --常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍...

    昨日内容回顾 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...

  8. python 全栈开发,Day51(常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍)...

    昨日内容回顾 1.三种引入方式1.行内js <div onclick = 'add(3,4)'></div>//声明一个函数function add(a,b){}2.内接js& ...

  9. javascript的内置对象以及BOM(定时器,location)

    javascript的内置对象以及BOM 内置对象 Number 代码演示 <script>//1. parseFloat() 将传入的字符串浮点数转为浮点数document.write( ...

最新文章

  1. 基于Centos7的autobahn-python+crossbar的环境搭建
  2. 细细品味大数据--初识hadoop
  3. 关系数据库的查询建表
  4. LinkCutTree 总结
  5. Javascript基础之-Promise
  6. 能用来写安卓吗_iPad能代替笔记本吗,除了看剧还能用来做什么?
  7. mysql 全局不重复_php uniqid() 通过MYSQL实现全局不重复的唯一ID
  8. sequelize怎么看插入的数据成功不成功_MySQL的4种事务隔离级别你还不清楚吗?
  9. java实现并发连接池_java并发实战:连接池实现
  10. ubuntu java jdk_在Ubuntu上编译Java JDK
  11. jquery 圆点绕圆旋转_jquery 圆形旋转图片滚动切换效果
  12. HttpClilent整合Spring使用
  13. Python--正则表达式处理文本
  14. 磁盘配额(Quota)磁盘阵列(RAID)逻辑卷轴管理器(LVM)学习记录
  15. 怀旧服显示已从服务器断开连接,魔兽世界怀旧服服务器进不去排队怎么办 服务器断开连接解决方法技巧分享...
  16. cmake:基于MDK(Keil)的Nationstech.N32G45x平台交叉编译工具链定义
  17. 多核与多个CPU啥区别
  18. 线性筛——约数的个数
  19. m基于改进PSO粒子群优化的RBF神经网络解耦控制算法matlab仿真
  20. python3 ldap 查询用户,使用管理重置用户密码

热门文章

  1. Python: Python中的AttributeError错误
  2. CNN结构:场景分割与Relation Network
  3. [填坑手册]小程序目录结构和组件化使用心得
  4. English sentences
  5. react-redux简版实现
  6. 虚拟机 搭建LVS + DR + keepalived 高可用负载均衡
  7. hbase的shell客户端中不同符号的含义
  8. 线程死锁与共享变量的使用(转载)
  9. RSA key format is not supported
  10. Ubuntu下面对Chrome浏览器护眼插件的调研