javascript数组浅谈2
上次说了数组元素的增删,的这次说说数组的一些操作方法
join()方法:
var arr=[,,]
arr.join("_") //1_2_3
join方法会返回一个由数组中每个值的字符串形式拼接而成的一个以join方法参数为连接符的字符串,join方法参数如果为空则以逗号连接,和toString()方法得到的值相似。
reverse()方法:
var arr=[,,];
arr.reverse(); //arr=[3,1,2]
reverse()方法会使数组发生改变,让数组元素的顺序反向排列,sort()方法有个小技巧也可以实现这样的效果,后边再说。
tip:reverse()方法只是将位置顺序反转,不是根据数值大小或是编码规则反转的。
sort()方法:
var arr1=["Lebro","Wade","Duncan"];
arr1.sort(); //["Duncan", "Lebro", "Wade"]
var arr2=[,,,,];
arr2.sort(); //[15, 18, 20, 3, 36]
默认情况下,sort()方法会按升序排列数组项,首先会调用每个数组项的toString()方法,然后比较得到的字符串,确定如何排序,所以就有了上边这段代码中数字没有按照我们想要的那样根据数字值的大小进行排序。w3cschool给出了这么一段解释:
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。 如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下: 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 的值。
若 a 等于 b,则返回 。
若 a 大于 b,则返回一个大于 的值。
说实话,这段关于比较函数的描述不难理解,但是比较函数的运行我还是比较难理解,下边给出我学习这个比较函数的一段代码和总结(因为是本人学习中不太理解的,所以写了出来,看官们要觉得不喜欢可以跳过)
首先,是吧这个所谓的比较函数各个参数打印出来,以及看arr的实时变化:
var arr=[,,,,];
arr.sort(sortAttr);
var sortAttr=function(a,b){
console.log(arr);
console.log("a="+a);
console.log("b="+b);
console.log("a-b="+(a-b));
return a-b;
};
下边是chrome浏览器打印出来的内容:
可以大致看出来这个所谓的比较函数了吧,他会将数组元素两两一比较,返回一个值,如果前一个值小于后一个值,那么返回一个负数,顺序不做改变。如果前一个值大于后一个值,那么交换两个顺序,再同前边排好序的元素进行比较,直到同第一个比较结束,第一个就会一直是最小的,以此类推直到最后一个元素通过这种方式排好序结束整个循环,这个两两比较有点类似于后边要说的reduce()函数,再说了。
至于说实现像reverse()方法的小方法,仅限全数字的数组反转,可以加深这块理解,只需要把比较函数的返回值改成固定返回一个负数即可,这样后边的元素就会一直往前边排序,完成反转。sort()方法也是会改变原数组的。
concat()方法
var arr=[,,];
arr.concat(,); //[1,2,3,4,5]
arr.concat([,]); //[1,2,3,4,5]
arr.concat([[,],]); //[1,2,3,[1,2],3]
concat()方法会基于当前数组,创建一个新的数组,然后将接收到的参数添加到这个新建数组的末尾,值如果是数组,会拆分一次逐个添加,3和4的区别就是这样,这个方法不会改变原数组。
slice()方法
var arr=[,,,,];
arr.slice(,); //[2,3]
arr.slice(); //[2,3,4,5]
arr.slice(,-); //[2,3,4]
arr.slice(-,-); //[2]
slice()方法可以截取数组的片段,返回一个新数组,对原数组不产生影响。该方法可接受0个,1个,2个参数,0个默认截取全部数组;2个参数时第一个参数是截取开始的位置,第二个参数是截取结束的位置,如果是负数则从右边下标为1开始计数截取;1个参数时默认截取从第一个参数位置开始到末尾。
splice()方法
var arr=[,,,,]
arr.splice(,); //arr=[1,2,5]
arr=[,,,,]; arr.splice(,,'a','b'); //arr=[1,'a','b',4,5]
splice()方法在原数组的基础上删除她的一个片段,返回删除的内容,第一个参数是开始位置,第二个参数表示要删除的元素个数,后边的元素表示替换删除结果的内容,第一个参数是负数同上,第二个参数是负数或者0表示不做删除。
下次说说数组的一些迭代和归并的方法。
javascript数组浅谈3:http://www.cnblogs.com/wangxiaosan/p/5505486.html
javascript数组浅谈2的更多相关文章
- javascript数组浅谈1
最近心血来潮要开始玩博客了,刚好也在看数组这块内容,第一篇就只好拿数组开刀了,自己总结的,有什么不对的地方还请批评指正,还有什么没写到的方面也可以提出来我进行完善,谢谢~~ 首先,大概说说数组的基本用 ...
- javascript数组浅谈3
前两节说了数组最基本的创建,队列方法,排序和一些操作方法,这节说说迭代和归并方法. every()方法 & some()方法 这两个方法会对数组中的每一项运行给定函数,然后返回一个布尔值,理解 ...
- JavaScript之浅谈内存空间
JavaScript之浅谈内存空间 JavaScipt 内存自动回收机制 在JavaScript中,最独特的一个特点就是拥有自动的垃圾回收机制(周期性执行),这也就意味者,前端开发人员能够专注于业余, ...
- 【javascript】浅谈javaScript的深拷贝
前言: 最开始意识到深拷贝的重要性是在我使用redux的时候(react + redux), redux的机制要求在reducer中必须返回一个新的对象,而不能对原来的对象做改动,事实上,当时 ...
- JavaScript闭包浅谈
------------------- 作者:willingtolove: 本文链接:http://www.cnblogs.com/willingtolove/p/4745889.html 1. 变量 ...
- 也谈面试必备问题之 JavaScript 数组去重
Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...
- Js之浅谈dom操作
JavaScript之浅谈dom操作 1.理解dom: DOM(Document Object Model ,文档对象模型)一种独立于语言,用于操作xml,html文档的应用编程接口. 怎么说,我从两 ...
- 浅谈JavaScript中的闭包
浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...
- JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈
toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种 ...
随机推荐
- POJ 1186 方程的解数
方程的解数 Time Limit: 15000MS Memory Limit: 128000K Total Submissions: 6188 Accepted: 2127 Case Time ...
- Qt实现FlatUI样式(开源)
对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产生的质感色彩反而没有扁平 ...
- ionic介绍
ionic介绍 Ionic是一个前端的框架,帮助开发者使用HTML5, CSS3和JavaScript做出原生应用. The beautiful, open source front-end fram ...
- Android应用中使用及实现系统“分享”接口
为了应用的推广.传播,很多的应用中都有“分享”功能,一个按钮,点击后会出现短信.微博等等一切实现了分享功能的应用列表.这一篇文章主要介绍怎么调用分享功能和怎么实现分享接口让自己应用出现分享列表中.An ...
- [CS231n-CNN] Training Neural Networks Part 1 : activation functions, weight initialization, gradient flow, batch normalization | babysitting the learning process, hyperparameter optimization
课程主页:http://cs231n.stanford.edu/ Introduction to neural networks -Training Neural Network ________ ...
- ArcGIS如何将表连接到空间数据上
当我们有一些空间数据和一些业务数据(表),希望把业务数据和空间数据连接起来时,可以采用ArcGIS Desktop进行操作.本文将介绍如何在ArcGIS Destop中将表和空间数据关联起来. Arc ...
- storm分组模式
Shuffle grouping: Tuples被随机分配到每一个bolt’s task,以便于每一个bolt’s task获得相同数量的tuples. Fields grouping: Stream ...
- 64位Win7下安装与配置PHP环境【Apache+PHP+MySQL】
[软件下载] 本安装实例所使用安装文件如图所示: 其中,64位版本的MySQL安装文件mysql-5.5.33-winx64.msi,可直接从官网下载,下载地址:http://dev.mysql.co ...
- HMM 自学教程(六)维特比算法
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- Android学习笔记之HttpClient实现Http请求....
PS:最近光忙着考试了....破组成原理都看吐了....搞的什么也不想干...写篇博客爽爽吧....貌似明天就考试了...sad... 学习笔记: 1.如何实现Http请求来实现通信.... 2.解决 ...