javascript数组浅谈2

    上次说了数组元素的增删,的这次说说数组的一些操作方法

    join()方法:

1 var arr=[1,2,3]
2 arr.join("_")       //1_2_3

join方法会返回一个由数组中每个值的字符串形式拼接而成的一个以join方法参数为连接符的字符串,join方法参数如果为空则以逗号连接,和toString()方法得到的值相似。

    reverse()方法:

1 var arr=[2,1,3];
2 arr.reverse(); //arr=[3,1,2]

reverse()方法会使数组发生改变,让数组元素的顺序反向排列,sort()方法有个小技巧也可以实现这样的效果,后边再说。

tip:reverse()方法只是将位置顺序反转,不是根据数值大小或是编码规则反转的。

    sort()方法:

1 var arr1=["Lebro","Wade","Duncan"];
2 arr1.sort();  //["Duncan", "Lebro", "Wade"]
3 var arr2=[20,15,3,36,18];
4 arr2.sort();  //[15, 18, 20, 3, 36]

默认情况下,sort()方法会按升序排列数组项,首先会调用每个数组项的toString()方法,然后比较得到的字符串,确定如何排序,所以就有了上边这段代码中数字没有按照我们想要的那样根据数字值的大小进行排序。w3cschool给出了这么一段解释:

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

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

说实话,这段关于比较函数的描述不难理解,但是比较函数的运行我还是比较难理解,下边给出我学习这个比较函数的一段代码和总结(因为是本人学习中不太理解的,所以写了出来,看官们要觉得不喜欢可以跳过)

首先,是吧这个所谓的比较函数各个参数打印出来,以及看arr的实时变化:

1 var arr=[29,5,11,2,21];
2 arr.sort(sortAttr);
3 var sortAttr=function(a,b){
4     console.log(arr);
5     console.log("a="+a);
6     console.log("b="+b);
7     console.log("a-b="+(a-b));
8     return a-b;
9 };

下边是chrome浏览器打印出来的内容:

可以大致看出来这个所谓的比较函数了吧,他会将数组元素两两一比较,返回一个值,如果前一个值小于后一个值,那么返回一个负数,顺序不做改变。如果前一个值大于后一个值,那么交换两个顺序,再同前边排好序的元素进行比较,直到同第一个比较结束,第一个就会一直是最小的,以此类推直到最后一个元素通过这种方式排好序结束整个循环,这个两两比较有点类似于后边要说的reduce()函数,再说了。

至于说实现像reverse()方法的小方法,仅限全数字的数组反转,可以加深这块理解,只需要把比较函数的返回值改成固定返回一个负数即可,这样后边的元素就会一直往前边排序,完成反转。sort()方法也是会改变原数组的。

    concat()方法

时间: 2024-10-11 22:18:04

javascript数组浅谈2的相关文章

javascript数组浅谈1

最近心血来潮要开始玩博客了,刚好也在看数组这块内容,第一篇就只好拿数组开刀了,自己总结的,有什么不对的地方还请批评指正,还有什么没写到的方面也可以提出来我进行完善,谢谢~~ 首先,大概说说数组的基本用法. 数组,即Array类型,是开发中最常用的类型之一,javascript中的数组和其他语言最大的区别就是每一项可以保存任何类型的数据,而且数组的大小是可以动态调整的,有点绕?看看代码吧 1.数组的创建: var arr=new Array(20); var arr1=["小伞",1,t

javascript数组浅谈3

前两节说了数组最基本的创建,队列方法,排序和一些操作方法,这节说说迭代和归并方法. every()方法 & some()方法 这两个方法会对数组中的每一项运行给定函数,然后返回一个布尔值,理解起来可以当成everyone和someone的区别来理解,看个例子就好了: var arr=[1,2,3,4,5]; var everyResult=arr.every(function(item,index,arr){ return (item>2); }) //false var someResul

JavaScript对象浅谈

JavaScript对象 对象 ECMA-262 把对象(object)定义为"属性的无序集合,每个属性存放一个原始值.对象或函数".严格来说,这意味着对象是无特定顺序的值的数组. 对象是属性和方法的无序集合 对象就是无序属性的集合 尽管 ECMAScript 如此定义对象,但它更通用的定义是基于代码的名词(人.地点或事物)的表示. 在JavaScript中,除了数字.字符串.布尔值.null.undefined这五种原始类型,之外的都是对象,也就是印证了"万物皆对象&quo

JavaScript闭包浅谈

------------------- 作者:willingtolove: 本文链接:http://www.cnblogs.com/willingtolove/p/4745889.html 1. 变量的作用域: 在javascript中,局部变量的作用域是由它定义的函数决定的,嵌套函数可以访问它的外部作用域的变量. EX1: 1 function hello() { 2 var name = "world"; 3 function hi() { 4 alert(name); 5 } 6

Js之浅谈dom操作

JavaScript之浅谈dom操作 1.理解dom: DOM(Document Object Model ,文档对象模型)一种独立于语言,用于操作xml,html文档的应用编程接口. 怎么说,我从两个角度理解: 对于JavaScript,为了能够使JavaScript操作Html,JavaScript就有了一套自己的dom编程接口. 对于Html,dom使得html形成一棵dom树,类似于一颗家族树一样,一层接一层,子子孙孙. 所以说,有了DOM,在我看来就是相当于JavaScript拿到了钥

JavaScript 数组去重

JavaScript 数组去重 Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对话,你会学到很多.为什么是 underscore?最主要的原因是 underscore 简短精悍(约 1.5k 行),封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript

浅谈 JavaScript 编程语言的编码规范

对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.软件存在的长期价值直接与编码的质量成比例.编码规范能帮助我们降低编程中不必要的麻烦.而 JavaScript 代码是直接发送给客户浏览器的,直接与客户见面,编码的质量更应该受到关注. 本文浅谈 JavaScript 编程中关

JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈

toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种类型转化为字符串类型的呢? 通过下面几个例子,我们便能获得答案: 1.将boolean类型的值转化为string类型: console.log(true.toString());//"true" console.log(false.toString());//"false&quo

《浅谈JavaScript系列》系列技术文章整理收藏

<浅谈JavaScript系列>系列技术文章整理收藏 1浅谈JavaScript中面向对象技术的模拟 2浅谈javascript函数劫持[转自xfocus]第1/3页 3浅谈javascript 面向对象编程 4老鱼 浅谈javascript面向对象编程 5浅谈javascript的数据类型检测 6浅谈Javascript嵌套函数及闭包 7根据一段代码浅谈Javascript闭包 8浅谈JavaScript编程语言的编码规范 9浅谈Javascript面向对象编程 10浅谈JavaScript