一、常用方法(push,pop,unshift,shift,join)
push pop栈方法,后进先出
var a =[1,2,3];
console.log(a.push(40)); //4 返回数组的长度
console.log(a); //[1, 2, 3, 40]
 
var b =[1,2,3];
console.log(b.pop()); //3 返回最后一项
console.log(b); // [1, 2]
------------------------------------------------------------------------------------------------------------------
unshift shift 对列方法,先进先出
var a =[1,2,3];
console.log(a.unshift(40));//4 返回数组长度
console.log(a); // [40, 1, 2, 3]
var b =[1,2,3];
console.log(b.shift()); //1 返回取出的第一项
console.log(b); //  [2, 3]
------------------------------------------------------------------------------------------------------------------
join方法,将数组合并成字符串
var aN=[1,2,3,4,5];
console.log(aN.join(''));//12345
console.log(aN.join('|'));//1|2|3|4|5

二、排序方法(sort,reverse)
reverse 反转方法,即将反转数组顺序
var arr = [1,2,3,4,5];
console.log(arr.reverse()); //[5, 4, 3, 2, 1]
------------------------------------------------------------------------------------------------------------------
sort方法,默认按数组升序进行排列,选把数组中所有项应用toString()方法,然后比较得到的字符串,从字符串首位开始比较
var arr =[1,14,3,25,5];
console.log(arr.sort()); // [1, 14, 25, 3, 5]
按字符首字母升序排列结果是:[1, 14, 25, 3, 5],因为1最小,所以1,14最前
对于sort方法有一个比较函数,可以扩展其功能
function compare(a,b){
    if(a<b){
        return -1;
    }else if(a>b){
        return 1;
    }else{
        return 0;
    }
}
用上面的比较函数对数字进行排序,可以得到我们想要的结果
console.log(arr.sort(compare)); //  [1, 3, 5, 14, 25];
当然这个方法还能简化;
console.log(arr.sort(function(a,b){return a-b}));
sort方法还有其它应用,例如对数组中项目进行随机排序,扩展方法如下:
console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [3, 1, 14, 5, 25]
console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [5, 1, 3, 14, 25]
console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [1, 5, 3, 25, 14]
console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [5, 25, 14, 1, 3]
console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [25, 5, 14, 3, 1]
执行了五次,得到的结果均不相同

三、concat方法
concat方法用于创建一个新数组
如果想要复制一个数组,用什么方法,举例如下;
var arr =[1,2,3,4,5];
var newArr = arr;
console.log(newArr);//[1, 2, 3, 4, 5]
newArr.push(6);
console.log(newArr);//[1, 2, 3, 4, 5, 6]
console.log(arr); //[1, 2, 3, 4, 5, 6]
可见newArr并不是一个新数组,修改newArr会改变数组,因为数组不是基本数组类型,而是引用类型,所以用=赋值只不过是创建了一个新的引用,修改newArr时会修改堆内存的数据。
那么如何得到一个新的和原来一样的数组呢?
var newArr1 = arr.concat();
console.log(newArr1);//[1, 2, 3, 4, 5]
newArr1.push(6);
console.log(newArr1);//[1, 2, 3, 4, 5, 6]
console.log(arr); //[1, 2, 3, 4, 5]
可见修改新数组不会对原数组产生影响。
concat方法除了复制数组外,主要用于数组的连接,使用concat方法后会返回一个新的数组
var aNumber = [1,2,3];
var aNumber2 = [4,5];
console.log(aNumber.concat(aNumber2)); //[1, 2, 3, 4, 5]
console.log(aNumber); //[1,2,3]
当然concat方法还支持字符串与数组的连接
console.log(aNumber.concat(7,8)); // [1, 2, 3, 7, 8]
console.log(aNumber.concat(7,[11,12])); //[1, 2, 3, 7, 11, 12]

四、slice方法
slice基于当前数组创建一个删除某些项的新数组
var aN =[1,2,3,4,5];
var aN1 = aN.slice(0,2);//截取第0项到第1项
console.log(aN); //[1, 2, 3, 4, 5] 原数组不变
console.log(aN1); // [1, 2]
console.log(aN.slice(1,3));//[2,3] 截取第1项到第2项
即截取起始位置到结束位置之间的项,包括起始位置,但不包括结束位置
如果只有一个参数,则截取该参数到当前数组末尾所有项
console.log(aN.slice(1));//[2, 3, 4, 5]
如果slice中的参数有负数,则用该负数加上数组的长度来确定起始位置或结束位置
console.log(aN.slice(-2,-1));// [4] 相当于console.log(aN.slice(3,4));

五、splice方法
splice方法可用于对原数组的插入、删除、修改,并不会创建一个新数组
var aN =[1,2,3,4,5];
aN.splice(1,2,'b'); //三个参数分别是起始位置,要删除的项数,需要添加的元素
console.log(aN);// [1, "b", 4, 5] 起始位置删除两项得到[1,4,5],然后将元素b插入起始位置
由于splice的强大功能可以实现删除,插入,修改功能
aN.splice(0,1);//删除第1项
aN.splice(1,1);//删除第2项
aN.splice(0,0,'a')//在第0项前插入'a'
aN.splice(2,0,'a')//在第2项前插入'a'
aN.splice(0,1,'b') //将第0项替换成'b'
aN.splice(2,1,'b') //将第2项替换成'b'

六、位置方法(indexOf,lastIndexOf)
indexOf是得到数组元素在数组中的位置,lastIndefOf是从数组末尾向开头找
var aN = [3,4,2,6,5,9];
console.log(aN.indexOf(2)); //2
console.log(aN.indexOf(6)); //3
console.log(aN.lastIndexOf(2));//2
console.log(aN.lastIndexOf(6));//3

indexOf和lastIndexOf都可以接收两个参数,第一个表示要查找的项,第二个表示查找的起来位置
var aN2 = [1,2,5,4,6,2,4,5,8,2];
console.log(aN2.indexOf(2,3));//5 从第4项开始算起,所以取的是第二个2,位置为5
console.log(aN2.lastIndexOf(2,5));//5 从第6项即第二个2开始从尾往前找,所以找到是第6项那个2,它的位置是5
console.log(aN2.lastIndexOf(2,4));//1 从第5项即6这个数字从尾往前找,所以找到是第2项那个2,它的位置是1

七、迭代方法(every,filter,forEach,map,some)
every:对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true.
var aN=[1,2,3,4,5]
var bFlag = aN.every(function(item){
    return item<6
})
console.log(bFlag);//true

var bFlag2 = aN.every(function(item){
    return item<4
})
console.log(bFlag);//false
------------------------------------------------------------------------------------------------------------------
some:对数组中的每一项运行给定函数,如果该函数对任一项都返回true,则返回true.
var aN=[1,2,3,4,5]
var bFlag = aN.some(function(item){
    return item==5
})
console.log(bFlag);//true
var aN=[1,2,3,4,5]
var bFlag = aN.some(function(item){
    return item==6
})
console.log(bFlag);//false
------------------------------------------------------------------------------------------------------------------
filter:对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
var aN=[1,2,3,4,5]
var aNewArr = aN.filter(function(item){
    return item>2
})
console.log(aNewArr);// [3, 4, 5]
------------------------------------------------------------------------------------------------------------------
forEach:对数组中的每一项运行给定函数,这个方法无返回值
var aN=[1,2,3,4,5]
aN.forEach(function(item){
    console.log(++item);
})
输出:
2
3
4
5
6
------------------------------------------------------------------------------------------------------------------
map:对数组中的每一项运行给定函数,返回数组调用的结果组成的数组
var aN = [1,2,3,4,5]
var aNewArr = aN.map(function(item){
    return ++item
})
console.log(aNewArr);//[2, 3, 4, 5, 6]

八、缩小方法(reduce,reduceRight)
reduce()方法从数组第一项开始,逐渐遍历到最后一项,reduceRight()方法从数组最后一项开始,逐渐遍历到第一项
var aN = [1,2,3,4,5]
var sum = aN.reduce(function(prev,cru,index,array){
  console.log(prev,cru);
  return prev+cru
})
console.log(sum);
输出
1 2
3 3
6 4
10 5
15
------------------------------------------------------------------------------------------------------------------
var aN = [1,2,3,4,5]
var sum = aN.reduceRight(function(prev,cru,index,array){
  console.log(prev,cru);
  return prev+cru
})
console.log(sum);
输出
5 4
9 3
12 2
14 1
15
------------------------------------------------------------------------------------------------------------------
除了求和也可以进行其它运算,例如求数组中所有项的乘积
var aN = [1,2,3,4,5]
var sum = aN.reduce(function(prev,cru,index,array){ 
  return prev*cru
})
console.log(sum);//120

javascript中数组的功能相当强大,无论是sort方法还是迭代方法(every,some,filter,forEach,map)或者缩小方法(reduce,reduceRight)都可以进行扩展,让代码执行效率更快,书写简单。

javascript中数组Array的方法的更多相关文章

  1. JavaScript中数组Array方法详解

    ECMAScript 3在Array.prototype中定义了一些很有用的操作数组的函数,这意味着这些函数作为任何数组的方法都是可用的. 1.Array.join()方法 Array.join()方 ...

  2. JavaScript中数组Array.sort()排序方法详解

    JavaScript中数组的sort()方法主要用于对数组的元素进行排序.其中,sort()方法有一个可选参数.但是,此参数必须是函数. 数组在调用sort()方法时,如果没有传参将按字母顺序(字符编 ...

  3. Javascript中数组的判断方法

    摘要: 1.数组检测的方法: 1) typeof . 2) instanceof . 3) constructor . 4) Object.prototype.toString. 5) Array.i ...

  4. javascript中数组常用的方法

    在JavaScript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法.数组是继承自Object的原型,并且他对typeof没有特殊的返回值,他只返回'object'. ...

  5. javascript中数组常用的方法和属性

    前言 在javascript中,数组是一种非常重要的数据类型,我们时常会和它打交道,最近在开发项目中频繁的使用到数组,但是自己对数组的众多方法已经是非常模糊了,为了方便自己以后能够更好的使用数组中的属 ...

  6. 【前端_js】javascript中数组的map()方法

    数组的map()方法用于遍历数组,每遍历一个元素就调用回调方法一次,并将回调函数的返回结果作为新数组的元素,被遍历的数组不会被改变. 语法:let newAarray = arr.map(functi ...

  7. javascript中数组的concat()方法 - 数组连接

    <html> <head> <title>数组的concat()方法</title> <script> /* 数组的concat()方法: ...

  8. JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some、for in、for of

    JavaScript中有非常多数组迭代方法,这里基本上吧所有的都介绍全了,我项目中比较喜欢的是forEach. 7.for in (for-in循环实际是为循环对象而设计的,for in也可以循环数组 ...

  9. javascript中数组的map方法

    map方法原型:array1.map(callbackfn[, thisArg]) 参数: array1,必选. 一个数组对象.该函数一般用于数组对象 callbackfn,必选. 最多可以接受三个参 ...

随机推荐

  1. Ubuntu进阶学习,指令迅速查询,Bug迅速查询(Ctrl+F)

    There is some notes while I am learning Ubuntu Operate System! (Ask Ubuntu) 1-- Hard link : ln comma ...

  2. 两台SQL Server数据同步解决方案

    复制的概念 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式.使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可 ...

  3. python singleton

    方法一:用元类的方式实现一个singleton. liuxiaoyan@development:~/mysite$ cat Singleton.py class Singleton(type): &q ...

  4. NOIP2013普及组 T2 表达式求值

    OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 #include<iostream> #include<algorithm> #include<cmat ...

  5. 【转】dsadd user批量创建AD用户命令详解

    常见的批量创建用户的方法有四种: 一. 帐户模板的方式 二. CSVDE和LDIFDE 三. 脚本的方式 四. DSADD 但是很少有详细的资料使用DSADD的方式来批量创建帐户,那么我就把我近期使用 ...

  6. bzoj-2748 2748: [HAOI2012]音量调节(dp)

    题目链接: 2748: [HAOI2012]音量调节 Time Limit: 3 Sec  Memory Limit: 128 MB Description 一个吉他手准备参加一场演出.他不喜欢在演出 ...

  7. Codeforces Round 261 Div.2 E Pashmak and Graph --DAG上的DP

    题意:n个点,m条边,每条边有一个权值,找一条边数最多的边权严格递增的路径,输出路径长度. 解法:先将边权从小到大排序,然后从大到小遍历,dp[u]表示从u出发能够构成的严格递增路径的最大长度. dp ...

  8. URAL 1416 Confidential --最小生成树与次小生成树

    题意:求一幅无向图的最小生成树与最小生成树,不存在输出-1 解法:用Kruskal求最小生成树,标记用过的边.求次小生成树时,依次枚举用过的边,将其去除后再求最小生成树,得出所有情况下的最小的生成树就 ...

  9. ZOJ 1109 Language of FatMouse

    较简单字典树,每输入一对字符串,前一个放在字典(数组)中,后一个插入字典树中,并将其最终的flag赋为前一个在数组中的下标,再就好找了.输入的处理方法要注意一下. 代码: #include <i ...

  10. unity3d Aniso Level 摄像机近地面清楚,远地面模糊

    设置方法 选中贴图 在属性面板,拖动Aniso Level的值从0~9改变,值越大贴图越清晰,但是消耗也变大,文档说会造成显卡消耗,一般只用在地面上,其他地方没必要 遇到的问题 但是打包到Ipod上面 ...