JavaScript Array对象使用方法解析


Posted in Javascript onSeptember 24, 2019

1.数组的常用方法

push(val):数组的末尾添加新的元素,返回操作完成后数组的长度

pop():删除数组最后一个元素,返回被删除的元素

shift():删除数组的第一个元素,返回被删除的元素

unshift(val):数组的开头添加新的元素,返回操作完成后数组的长度

<script>
  var arr = [1,2,3,4]

  // 在数组末尾添加元素
  arr.push(5)
  console.log(arr) // [1, 2, 3, 4, 5]

  // 删除数组最后一个元素
  arr.pop()
  console.log(arr) // [1, 2, 3, 4]

  // 在数组最前面添加元素
  arr.unshift(0)
  console.log(arr) // [0, 1, 2, 3, 4]

  // 删除数组的第一个元素
  arr.shift()
  console.log(arr) // [1, 2, 3, 4]
</script>

2.数组的遍历

数组遍历可以使用for循环和foreach

<script>
  var arr = [1,2,3,4]

  // for循环
  for(var i=0;i<arr.length;i++){
    console.log(arr[i])
  }

  // foreach
  arr.forEach(function(val,index){
    console.log(val,index)
  })
</script>

3.ES6数组新增方法

<script>
  var arr = [1,2,3,4]
  var newArr = arr.map(function(val){
    return val*2
  })
  console.log(newArr) // [2, 4, 6, 8]
</script>

filter(cb):过滤

<script>
  var arr = [1,2,3,4]

  var newArr = arr.filter(function(val){
    // 只保留 >2 的元素
    return val>2
  })

  console.log(newArr) // [3, 4]
</script>

some(cb) :检测数组中是否有元素满足条件,只要有一个满足就返回true,否则返回false

<script>
  var arr = [1,2,3,4]

  var flag = arr.some(function(val){
    return val>2
  })
  console.log(flag) // true

  var flag2 = arr.some(function(val){
    return val>5
  })
  console.log(flag2) // false
</script>

every(cb):所有元素都满足才会返回true,否则返回false

<script>
  var arr = [1,2,3,4]

  var flag = arr.every(function(val){
    return val>2
  })
  console.log(flag) // false

  var flag2 = arr.every(function(val){
    return val>0
  })
  console.log(flag2) // true
</script>

reduce(cb):累加器

reduce()对数组元素进行遍历,每次遍历就进行依次累加计算,遍历结束后返回累加的最终值

语法:arr.reduce((要累加并返回的数,数组元素) => {},初始值)

var list = [
  {name:'西瓜',price:2,num:2},
  {name:'香蕉',price:4,num:1},
  {name:'玉米',price:2,num:5},
  {name:'苹果',price:8,num:1}
]
var totalPrice = list.reduce((total,item) => {
  return total + item.price * item.num
},0)
console.log(totalPrice) // 26

4.查找数组的子元素

查找数组元素的下标

indexOf():返回具体元素在数组中的下标

findIndex(cb):查找符合条件的第一个元素的下标

lastIndexOf()和indexOf()的功能一样,不同的是lastIndexOf()从后往前查找

<script>
  var arr = [1,2,3,4]

  var index = arr.indexOf(1)
  console.log(index) // 0
  var index2 = arr.indexOf(5) // 没有这个元素
  console.log(index2) // -1

  var index3 = arr.findIndex(function(val){
    return val>2
  })
  console.log(index3) // 2
  var index4 = arr.findIndex(function(val){
    // 没有一个元素符合条件
    return val>5
  })
  console.log(index4) //-1
</script>

查找符合条件的第一个数组元素 find(cb)

这个方法跟filter()差不多,只是这个只查找一个。而filter()会查找所有符合条件的数组元素

<script>
  var arr = [1,2,3,4]

  var result = arr.find(function(val){
    // 查找第一个大于3.5的子元素
    return val>3.5
  })
  console.log(result) // 4
</script>

判断一个数组是否含有某个子元素 includes()

<script>
  var arr = [1,2,3,4]

  // 数组是否含有 1
  var flag = arr.includes(2)
  // 数组是否含有 5
  var flag2 = arr.includes(5)

  console.log(flag) // true
  console.log(flag2) // false
</script>

5.数组转换

数组与字符串间的转换 split()/join()

<script>
  var str = "hello world"
  // 根据标识将字符串分割成数组
  var arr = str.split(" ")
  console.log(arr) //["hello", "world"]

  // 将数组的子元素拼接成字符串
  var str2 = arr.join("-")
  console.log(str2) // "hello-world"
</script>

伪数组转化为数组(一个对象,如果可以通过下标的形式访问属性值,那么它就属于伪数组)

Array.from() 推荐

Array.prototype.slice()

通过某些方法获取到的Dom元素是一个伪数组,不能正常使用foreach(),除非先转换成数组

<script>
  var lis = document.getElementsByTagName('li')

  // 伪数组,不能使用foreach()
  console.log(lis) // HTMLCollection(4) [li.test, li.test, li.test, li.test]

  // 已经转化为数组,但是是个空数组,依然无法遍历
  console.log(Array.prototype.slice(lis)) // []

  // 已经转化为数组,且可以遍历
  console.log(Array.from(lis)) // [li.test, li.test, li.test, li.test]

  Array.from(lis).forEach(function(item){
    console.log(item.innerHTML)
  })
</script>

6.数组排序

1.插入排序

从第二个元素开始,拿他前面的元素与它比较,如果它比前面的元素小,则这个对比元素往后挪一个位置(实际上是arr[p + 1] = arr[p]),接着往左边找对比元素左比较,直到找到最后一个或者比它小的元素位置为止,此时将这个元素放到这个相应的位置(arr[p + 1] = temp),每轮循环结束都能保证前面的数据是升序排列的

<script>
  var arr = [6, 3, 4, 7, 5, 19, 2];
  var length = arr.length;
  // 进行升序排列,大的元素往右边挤,小的元素往左边挤
  for (var i = 1; i < length; i++) {
    // i为当前元素的下标
    var temp = arr[i];
    // p为比对元素的下标
    p = i - 1;
    // 如果当前元素比目标元素小
    while (p >= 0 && temp < arr[p]) {
      // 将比对元素往右挪一个位置
      arr[p + 1] = arr[p];
      // 往左一个位置找新的比对元素
      p--;
    }
    // 将当前元素放到合适的位置
    arr[p + 1] = temp;
  }
  console.log(arr) // [2, 3, 4, 5, 6, 7, 19]
</script>

2.快速排序

将一个数组的中间元素取出(splice,这个方法会改变原数组,同时将将截取的元素以数字的形式返回),然后定义两个左右空数据,遍历这个原数组,将小于被取出元素值的元素放入左边的数组,反之放入右边的数组,一轮循环之后将这左右两个数组和中间元素拼接起来,同时对左右数组进行递归调用

var arr = [4, 3, 6, 7, 5, 19, 2];
var newArr = quickSort(arr);
console.log(newArr);
function quickSort(arr) {
  if (arr.length <= 1) return arr;
  else {
    var center = parseInt((arr.length - 1) / 2);
    var centerValue = arr.splice(center, 1)[0];
    var left = [];
    var right = [];
    for (var i = 0; i < arr.length; i++) {
      if (arr[i] <= centerValue) {
        left.push(arr[i]);
      } else {
        right.push(arr[i]);
      }
    }
    return quickSort(left).concat(centerValue, quickSort(right));
  }
}

3.sort排序

<script>
  var arr = [
    {name:"张三",age:18},
    {name:"李四",age:16},
    {name:"王五",age:10},
    {name:"赵六",age:22}
  ]
  arr.sort(function(p1,p2){
    //p1.age-p2.age就是升序
    //p2.age-p1.age就是降序
    return p1.age-p2.age
  })
  console.log(arr)
  // [{name: "王五", age: 10}
  // {name: "李四", age: 16}
  // {name: "张三", age: 18}
  // {name: "赵六", age: 22}]
</script>

7.其他方法

数组反转 reverse() 将当前数组反转,会改变当前数组

<script>
  var arr = [1,2,3,4]
  arr.reverse()
  console.log(arr) // [4, 3, 2, 1]
</script>

剪接数组 splice() 会改变当前数组

可以删除任意数组元素,还可以向数组添加元素

语法:arr.splice(index,num,item1,item2...)

index:规定从何处添加/删除元素

num:删除多少元素

后面的参数可以是0个也可以是多个,表示要添加的数组元素

<script>
  var arr = [1,2,3,4]
  // 在下标3的位置添加数组元素
  arr.splice(3,0,5)
  console.log(arr) // [1, 2, 3, 5, 4]
  // 删除下标为1的数组元素
  arr.splice(1,1)
  console.log(arr) // [1, 3, 5, 4]
  // 从下标1的位置开始删除3个元素,并添加2个元素
  arr.splice(1,3,"life","good")
  console.log(arr) // [1, "life", "good"]
</script>

数组剪切 slice() 根据给定的下标,将两个下标之间的元素以数组形式返回,不会改变原数组

语法:arr.slice(n,m) 将arr[n]到arr[m-1]之间的元素以数组形式返回

<script>
  var arr = [1,2,3,4]
  // 不包含参数二对象的下标元素
  var newArr = arr.slice(1,3)
  console.log(newArr) // [2, 3]
  // 默认剪切到最后一个元素
  var newArr2 = arr.slice(1)
  console.log(newArr2) //[2, 3, 4]
  // 可接受负数
  var newArr3 = arr.slice(0,-1)
  console.log(newArr3) //[1, 2, 3]
</script>

拼接2个数组 concat()

不会改变原数组,而是将拼接后的新数组返回

<script>
  var arr = [1,2,3,4]
  var arr2 = [5,6,7,8]
  var newArr = arr.concat(arr2)
  console.log(arr) // [1,2,3,4]
  console.log(arr2) // [5,6,7,8]
  console.log(newArr) // [1, 2, 3, 4, 5, 6, 7, 8]
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
为调试JavaScript添加输出窗口的代码
Feb 07 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
Aug 02 Javascript
Jquery取得iframe下内容的方法
Nov 18 Javascript
javascript实现字符串反转的方法
Feb 05 Javascript
JS去除空格和换行的正则表达式(推荐)
Jun 14 Javascript
JavaScript中setter和getter方法介绍
Jul 11 Javascript
深入理解JavaScript中Ajax
Aug 02 Javascript
简单谈谈ES6的六个小特性
Nov 18 Javascript
JS验证input输入框(字母,数字,符号,中文)
Mar 23 Javascript
原生JS进行前后端同构
Apr 22 Javascript
Angular父子组件通过服务传参的示例方法
Oct 31 Javascript
js canvas实现五子棋小游戏
Jan 22 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
Sep 24 #Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
Sep 24 #Javascript
基于layui的下拉列表的数据回显方法
Sep 24 #Javascript
Layui动态生成select下拉选择框不显示的解决方法
Sep 24 #Javascript
layui动态渲染生成select的option值方法
Sep 23 #Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
Sep 23 #Javascript
layui-select动态选中值的例子
Sep 23 #Javascript
You might like
PHP日期时间函数的高级应用技巧
2009/05/16 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
Python 命令行参数sys.argv
2008/09/06 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
大学生标准推荐信范文
2013/11/25 职场文书
自荐书模板
2013/12/15 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
平安校园建设方案
2014/05/02 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
模范教师材料大全
2014/12/16 职场文书
画展邀请函
2015/01/31 职场文书
学校教学管理制度
2015/08/06 职场文书