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()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种 ...
随机推荐
- 控制反转(Ioc)和依赖注入(DI)
控制反转IOC, 全称 “Inversion of Control”.依赖注入DI, 全称 “Dependency Injection”. 面向的问题:软件开发中,为了降低模块间.类间的耦合度,提倡基 ...
- iOS 7定制UIPageControl遇到的问题
转自snorlax's blog 先说下ios7之前 那些点点的实现非常简单 就是UIPageControl.subviews 就是一个个点的UIImageView 所以只需简单的替换掉就好了代码如下 ...
- Redis内存数据库在Exchange会议室的应用
本文论述了现有Exchange会议室应用现状和不足之处,并详细介绍了Redis内存数据库在Exchange会议室的应用,并给出了一种高性能的应用架构及采用关键技术和关键实现过程,最终实现大幅改进系统性 ...
- python 字符串翻转
通过步进反转[::-1] ]##[::-1]通过步进反转print b
- Investigating Your RAM Usage
转载自:http://developer.android.com/intl/zh-cn/tools/debugging/debugging-memory.html Because Android is ...
- ruby -- 基础学习(八)中文字符串截取的函数
学习来源:http://www.codesky.net/article/200910/166595.html truncate(text, length = 30, truncate_string = ...
- c#关于委托和事件(二)(介绍的很详细)
using System;using System.Collections.Generic;using System.Text; namespace Delegate { // 热水器 p ...
- The Top 10 Javascript MVC Frameworks Reviewed
Over the last several months I have been in a constant search for the perfect javascript MVC framewo ...
- Android 学习笔记 BroadcastReceiver广播...
PS:不断提升自己,是件好事... 学习内容: 1.BroadcastReceiver的使用.. 2.通过BroadcastReceiver去启动Service... 1.BroadcastRecei ...
- Repository模式中,Update总是失败及其解析
在Repository模式中,我的Update方法总是无法更新实体,这个非常郁闷,Update方法如下: 1: public virtual void Update(T entity) 2: { 3: ...