一、不影响原数组产生一个新数组

  slice:切片->返回新数组->复制数组:arr.slice(0)
   arrayObject.slice(start,end): 切片
var arr= [1,2,3,4]
arr.slice(1,3);//[2, 3]
arr.slice(0);//[1, 2, 3, 4]复制数组,或者循环元素进行复制。复制数组是副本,b===a为false。b=a是指针,b===a为true

 concat: 连接两个或更多的数组->返回新数组->复制数组:arr.concat()

concat() 连接两个或更多的数组,并返回结果。

arrayObject.concat(arrayX,arrayX,......,arrayX)

var arr=[1,2];
arr.concat(3);//[1, 2, 3]
arr.concat([3,4]);//[1, 2, 3, 4],把数组中的元素拿了出来
arr.concat([[6,7],[8,9]]);//[1, 2, Array[2]0: 61: 7length: 2__proto__: Array[0], Array[2]0: 81: 9length: 2__proto__: Array[0]]
//拿出的只是第一层数组中的元素哦

二、影响原数组内部元素顺序

  reverse:颠倒原数组中元素的顺序(由sort排序实现)->返回改变后的原数组

  sort:对原数组的元素进行排序->返回改变后的原数组

    

var arr=[1,3,2];
//undefined
arr
//[1, 3, 2]
arr.sort(function(a,b){return b-a})
//[3, 2, 1]
arr.sort(function(a,b){return a-b})//如果得到负数,则第一个参数排在前面
//[1, 2, 3]

Good parts:p79

  1、它不能正确地给一组数字排序。

    JavaScript的默认比较函数把要被排序的元素都视为字符串。所以你在js里做任何比较要先确定类型哦。

var arr=[16,11,20,4]
//undefined
arr.sort()
//[11, 16, 20, 4]

  比较函数应该接受两个参数,并且如果这两个参数相等则返回0,如果第1个参数应该排列在前面,则返回一个负数,如果第2个参数应该排列在前端,则返回一个正数。

  arr.sort(funciton(a,b){return a - b})//1,0,-1都有的哈~

  这个函数可以使数字正确排序,不能使字符串排序。如果我们想要给任何包含简单值的数组排序,必须要做更多的工作。

2、字符串排序

如果大小写不重要,你的比较函数应该在比较之前先将两个运算数转化为小写。

var m = ['aa','bb','aa','a',8,4,15,16,23,42,8,8,8,8];
m.sort(function(a,b){
if(a === b){
return 0;
}
if(typeof a === typeof b){
return a < b ? -1 : 1;//为啥?
}
return typeof a < typeof b ? -1 : 1;
});

  return 0 ;是一定要写的,否则容易出错。比如 (这一点说明sort方法的不稳定性,即会改变相待值的相对位置。不同浏览器实现不一样。)

var obj1 = { name : "test" };
var obj2 = { name : "test" };
var c = [obj1, obj2];
c.sort(function (a, b) {
return a.name < b.name ? -1 : 1;
});
//[Object, Object]
c.indexOf(obj1)
//

当然了,比较字符串和数字的话应该不会出现问题。

3、比较对象

 //比较对象
var by = function(name){
return function(a,b) {
if (typeof a === 'object' && typeof b === 'object' && a && b) {//为什么还要判断 &&a&&b.因为null啊!!!typeof null //object
var aName = a[name],
bName = b[name];
if (aName === bName) {
arr.sort(by('name')); return 0;
}
if (typeof aName === typeof bName) {
return aName > bName ? 1 : -1;
}
return typeof a < typeof b ? -1 : 1;
}else{
throw {
name:"Error",
message:"Expected an object when sorting by "+name
};
}
}
}
var arr=[
{
name:'s',
lastName:'jr'
},{
name:'z',
lastName:'a'
},{
name:'a',
lastName:'y'
}]
//Object
lastName: "y"
name: "a"
__proto__: Object
,
Object
lastName: "jr"
name: "s"
__proto__: Object
,
Object
lastName: "a"
name: "z"
__proto__: Object

三、影响原数组长度  

改变原数组(添加返回长度,删除返回删除的元素):

push:向数组的末尾添加元素->返回数组长度   

arr.push([])
//5
arr
//[1, 2, 3, "a", Array[0]]

pop:删除末尾元素->并返回末尾元素

arr.pop()
//[]
arr
//[1, 2, 3, "a"]

shift: 删除一个元素,并返回第一个元素的值

arr.shift()
//1
arr
//[2, 3, "a"]

unshift: 向数组的开头添加元素->返回新的长度

arr.unshift("b")
//4
arr
//["b", 2, 3, "a"]

splice:向/从数组中添加/删除项目->返回被删除的项目

数组其实就是对象,所以delete运算符可以用来从数组中称除元素。但是会留下一个空洞。delete numbers[2]//原位置变成了undefined。

  如果想递减后面每个元素的属性,则用splice。

  但是,因为被删除属性后面的每个属性必须被移除,并且以一个新的键值重新插入,这对于大型数组来说可能会效率不高。-good parts p59

  

arrayObject.splice(index,howmany,item1,.....,itemX)
参数 描述
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX 可选。向数组添加的新项目。
arr
//["b", 2, 3, "a"]
arr.splice(2,0,"William")
//[]
arr
//["b", 2, "William", 3, "a"]

四、寻找某个元素在数组的位置

返回要查找项在数组中的位置或-1。参数:要查找的项,查找起点位置的索引。 以===原则查找

对象数组也一样哦~

indexOf:从头查找

lastIndexOf:从末尾查找

五、迭代器

5个迭代方法,都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象--影响this的值。

传入这些方法的函数会接收三个参数:数组项的值、该项在数组中的位置和数组对象本身。都不会修改数组中的包含的值。

every:如果该函数对每一项都返回true,则返回true;  

var numbers=[1,2,3,4,5,4,3,2,1]
//undefined
var everyResult=numbers.every(function(item,index,array){return (item>2)})
//undefined
everyResult
//false

  some:如果该函数对任一项返回true,则返回true;

var everyResult=numbers.some(function(item,index,array){return (item>4)})
//undefined
everyResult
//true

  filter:返回该函数会返回true的项组成的数组;

var everyResult=numbers.filter(function(item,index,array){return (item>2)})
//undefined
everyResult
//[3, 4, 5, 4, 3]

  map:返回每次函数调用的结果组成的数组;

var everyResult=numbers.map(function(item,index,array){return (item>2)})
//undefined
everyResult
//[false, false, true, true, true, true, true, false, false]

  forEach:无返回值;本质上与使用for循环迭代数组一样。

归化数组的方法:迭代数组所有项,然后构建一个最终返回的值,reduceRight反向。

参数:在每一项上调用的函数,作为缩小基础的初始值(可选)。

函数接收参数:前一个值,当前值,项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发现在数组的第二项目上,因此第一个参数是数组的第一项,第二个参数是数组的第二项。

reduce:可以执行求数组所有值和的操作

numbers.reduce(function(pre,cur,index,array){return pre+cur})
//25

  reduceRight:除了遍历方向,其他都相同。

  兼容低版本浏览器链接:http://www.cnblogs.com/rubylouvre/archive/2011/07/27/2117862.html

   六、将数组元素拼接为字符串

  join:把数组所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。

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

  

Array方法总结的更多相关文章

  1. S5中新增的Array方法详细说明

      ES5中新增的Array方法详细说明 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wor ...

  2. ES5中新增的Array方法详细说明

    一.前言-索引 ES5中新增的不少东西,了解之对我们写JavaScript会有不少帮助,比如数组这块,我们可能就不需要去有板有眼地for循环了. ES5中新增了写数组方法,如下: forEach (j ...

  3. 【原】javascript笔记之Array方法forEach&map&filter&some&every&reduce&reduceRight

    做前端有多年了,看过不少技术文章,学了新的技术,但更新迭代快的大前端,庞大的知识库,很多学过就忘记了,特别在项目紧急的条件下,哪怕心中隐隐约约有学过一个方法,但会下意识的使用旧的方法去解决,多年前ES ...

  4. 5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例

    ES5中,一共有9个Array方法 Array.prototype.indexOf Array.prototype.lastIndexOf Array.prototype.every Array.pr ...

  5. js Array 方法总结

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Javascript Array 方法整理

    Javascript Array 方法整理 Javascript 数组相关方法 说明 大多数其它编程语言不允许改变数组大小,越界访问索引会报错,但是 javascript不会报错,不过不建议直接修改a ...

  7. ECMAScript5中新增的Array方法实例详解

    ECMAScript5标准发布于2009年12月3日,它带来了一些新的,改善现有的Array数组操作的方法.(注意兼容性) 在ES5中,一共有9个Array方法:http://kangax.githu ...

  8. JavaScript中Array方法总览

    title: JavaScript中Array方法总览 toc: true date: 2018-10-13 12:48:14 push(x) 将x添加到数组最后,可添加多个值,返回数组长度.改变原数 ...

  9. 5个现在就该使用的数组Array方法: indexOf/filter/forEach/map/reduce详解(转)

    ECMAScript5标准发布于2009年12月3日,它带来了一些新的,改善现有的Array数组操作的方法.然而,这些新奇的数组方法并没有真正流行起来的,因为当时市场上缺乏支持ES5的浏览器.     ...

  10. js中Array方法归类解析

    为什么要对Array方法进行归类解析 因为它常用,而且面试必问 改变原数组的方法 pop 删除并返回数组最后一个元素push 从末尾给数组添加元素,返回新数组length值reverse 颠倒数组元素 ...

随机推荐

  1. UVA 10047 - The Monocycle BFS

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  2. ES权威指南1

    Elasticsearch学习笔记 一 本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws. 本文参考和学习资料 <ES权威指南> ...

  3. Iaas、Paas和Saas的区别

    Iaas: Infrastructure-as-a-service(基础设施即服务),Iaas上购买的一般是主机,用户不光要开发程序,还要考虑搭建系统,维护运行环境,以及怎么容灾,怎么做到高可用,怎么 ...

  4. 12.2 linux USB框架分析(详细注册match匹配过程)

     首先我们先来简单说一说USB的框架,之后在来具体分析源码,以便加深理解!其实USB的框架比较像“平台总线.设备.驱动”的框架,也分为总线.设备.驱动三大块.其中总线驱动是已经由内核完成的,一旦接入u ...

  5. spring mvc controller间跳转 重定向 传参(转)

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  6. [疯狂Java]JDBC:事务管理、中间点、批量更新

    1. 数据库事务的概念:     1) 事务的目的就是为了保证数据库中数据的完整性.     2) 设想一个银行转账的过程,假设分两步,第一步是A的账户-1000,第二步是B的账户+1000.这两个动 ...

  7. [Math Processing Error] 问题的解决(F5刷新页面与 Ctrl/Shift + F5 刷新页面的区别)

    Why is [Math Processing Error] all over the place today? 当打开某页面出现 [Math Processing Error],一般表示 MathJ ...

  8. HDU 2852 KiKi's K-Number 树状数组

    先补充从n个数中求第k小数的理论知识........ 睡觉去~ ------------------------------------------又要睡觉的分割线------------------ ...

  9. mycat 离散分片 -&gt; 程序指定分区的分片

    1.程序指定分区的分片 此规则是在运行阶段有应用自主决定路由到那个分片. 此方法为直接依据字符子串(必须是数字)计算分区号(由应用传递參数.显式指定分区号). 2,加入配置文件 在function.x ...

  10. Lucene学习总结之六:Lucene打分公式的数学推导 2014-06-25 14:20 384人阅读 评论(0) 收藏

    在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下.因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数. Lucene ...