专栏首页怀英的自我修炼怀英漫谈9 - JS 数组

怀英漫谈9 - JS 数组

你好,这一周,我们来聊聊JS的数组。

所谓的数组,就是一些数据的集合,JS中没有集合的概念,所以集合也是数组的一种。如果你Java用的多,那么这个概念就有点儿难以理解,毕竟从Java的文意来说,集合的范围要远远高于数组。不过这是在JS中,那只能入乡随俗了。

就我目前的开发而言,数组用的多的方法是增、删、查。这其中又以查用的最多。你可可能想要问我“修改”这个功能去了哪里,其实修改这个功能我倒是觉得这是个伪命题,为什么这么说呢?因为数组修改的本质是先定位需要修改的那个数据,即得到那个数据的下标,然后再给那个下标重新赋值就可以了。这么一来,与修改这个操作等价的操作就是查找+重新赋值。

在数组的这些个方法中,我们先来说说“查”这个方法,在开发中最常遇到的需求是,知道一个数组的元素,但我想知道这个元素在这个数组中的位置。比如一个名字叫week的数组['星期一','星期二','星期三','星期四','星期五','星期六','星期7'],其中'星期7'这个元素我填写错了,我现在想要将它改为'星期日',这个时候我就要先去查找它,然后再将这个下标下的值改为'星期日',此时的查找我通常会用indexOf()函数,直接祭出代码indexOf('星期7');就能得到想要的下标了。

此时,如果你问我除了indexOf()这个方法,还有其它的方法么?之前开发的时候,我还真的只知道这一种方法,不过聊天之前,我查了一下API,发现indexOf的本质是遍历数组,所以,用遍历数组的方式也能做,不过那样话,就会比较麻烦。需要自己定义位置的标记,然后还需要自己去实现比较。通常在效率第一的前提下,很少这样用。

其实从某种程度上来说,indexOf()这个方法是对遍历的一种封装。数组的遍历,有foreach(), map(), reduce()三种。reduce()属于迭代器的操作,说实话,用的少,对其的了解也并不深,foreach()倒是常用,它和map()的区别是,foreach()操作的是原有的数组,而map()对原有的数组没有改变。而且这两个遍历方法的核心所在是它们callback函数的参数列表,(item,index,array),item指目前遍历的这个下标的元素,index是目前遍历的这个下标,array是整个数组。这三个参数列表决定了每一个元素被遍历到的时候所做的操作,所以会格外的重要。

说完了排序,下一个要说的就是数组的增和删了,我长用的增添的方法是push(),删除的方法pop(),push()方法是增添第一个元素,pop()方法是删除最后一个元素。与其对应的还有两个方法,我对他们也不是很熟悉,就不做介绍了。

不过与其相关的还有一个方法splice()能做到在任意的位置添加,删除,替换数组元素,这个方法至少要传入2个参数,第一个参数要被添加、删除、替换元素的索引位置,第二个是要删除多少个元素,第三个是要添加的元素。这样一来,通过这三个参数的不同组合,就能达到添加、删除、替换的不同效果。比如有一个数组arr=[1,2,3]; 。如果想要替换索引1的元素,就可以这么写arr.splice(1, 1, 12);,即在索引1的位置删除1个元素,新添一个元素12,返回[1,12,3],达到替换的效果。如果想要添加一个元素,那么可以这么写arr.splice(1, 0, 123); ,即在索引1的位置,删除0个元素,,新增一个元素123,返回[1,123,2,3],从而达到增添的效果。如果想要删除一个元素,那么可以这么写arr.splice(1,1);,即在索引为1的位置,删除1个元素,不增添新的元素,返回[1,3],从而达到删除的效果。

除了这些常用的方法之外,其它的还有一些增强型的方法,比如数组排序,数组合并等,我列在下面,如有兴趣,可以去w3c上瞅一眼。

清 单

arr.indexOf(element[,beginIndex]);

查找

arr.forEach(callback);

遍历(对原数组有改变)

arr.map(callback)

遍历(对原数组没有改变)

arr.reduce(callback[,initialValue])

遍历(迭代器方式)

arr.reverse()

反转数组元素顺序

arr.sort([function])

排序

arr.push(ele1,ele2….)

向数组结尾后面添加新的元素

arr.unshift(ele1,ele2…)

向数组开始前面添加新的元素

arr.shift()

从数组中取出该数组的第一个元素

arr.pop()

从数组中取出该数组的最后一个元素

arr.splice(index,howMany[,ele1…])

在任意位置添加、删除、替换数组的元素

arr.slice(begin,end)

拷贝

arr.concat(value1,value2…)

合并数组

arr.join(separator)

数组通过separator(分隔符)连接把数组转换为字符串

本文分享自微信公众号 - 怀英的自我修炼(hydzwxl),作者:怀英

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-07

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java漫谈6

    今天这篇想聊聊数组。 在聊数组之前先聊个别的,如果想在Java中实现一个 数字-月份 转换,那我该怎么做呢?就比如数字1代表了一月份,数字2代表了二月份…数字1...

    用户1335799
  • 《Spring实战》摘录 - 11

    问题: #5.2.3-1 | 测试SpittleController处理针对“/spittles”的GET请求 回答:

    用户1335799
  • 《Spring实战》摘录 - 16

    回答:视图状态会涉及到流程应用程序的用户,而行为状态则是应用程序自身在执行任务。行为状态一般会触发Spring所管理bean的一些方法并根据方法调用的执行结果转...

    用户1335799
  • 零基础python教程—python数组

    在学习Python过程中数组是个逃不过去的一个关,既然逃不过去咱就勇敢面对它,学习一下python中数组如何使用。

    小小科
  • 数据结构Stack

    ​ 在很多应用中,我们需要维护多个对象的集合,这种操作非常简单。我们可能想要向集合中 加入某个元素,去掉某个元素,以及遍历 集合中的元素并对他们执行某种操...

    lwen
  • 【30秒一个知识点】Array(二)

    使用 Array.from()创建一个新的数组,该数组与将要生成的块的数量相匹配。 使用 Array.prototype.slice() 将新数组的每个元素映射...

    ConardLi
  • 几种基础排序算法的python实现

    最近利用晚上闲下来的时间整理了一些基础的排序算法,这些排序算法一般的就是在学习数据结构的时候都是要求掌握的,作为一个开发者来说,会排序那是最基础的技能,也是最重...

    我被狗咬了
  • vue要点记录(待更新)

    mcq
  • JS数组操作

    1)delete方法:delete arr[1] 这种方式数组长度不变,此时arr[1]变为undefined了,但是也有好处原来数组的索引也保持不变,此时要遍...

    似水的流年
  • python中对列表元素大小排序(冒泡排序法,选择排序法和插入排序法)—排序算法

    排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。本文主要讲述python...

    zeruns

扫码关注云+社区

领取腾讯云代金券