一、数组的栈,队列方法【调用这些方法原数组会发生改变】
var arr = [2,3,4,5,6];
1.栈 LIFO (Last-In-First-Out)
a、push() 可接受任意类型的参数,将它们逐个添加到数组的末尾。【返回数组的长度】

    console.log(arr);  //[2,3,4,5,6]
console.log(+arr.push(7)); //返回添加数据后数组的长度:6
console.log(arr); //[2,3,4,5,6,7]

b、pop() 从数组的末尾移除最后一项,减少数组的length值。【返回移除的项】

    console.log(arr.pop()); //取出栈顶元素并返回该栈顶元素值:7
console.log(arr); //[2,3,4,5,6]

2.队列 FIFO (First-In-First-Out)
a、shift() 移除数组中的第一个项,同时将数组的长度减一。【返回移除的项】

    console.log(arr.shift()); //hello
console.log(arr); //[2,3,4,5,6]

b、unshift() 在数组的前端添加任意个项。【返回数组的长度】

    console.log(arr.unshift('hello')); //
console.log(arr); //['hello',2,3,4,5,6]

二、数组的排序方法【reverse()方法、sort()方法】(原数组发生改变)
var arr = [23,56,12,43,6,23,26];
1、reverse()方法:【对数组项进行反转】

    console.log(arr);
//反转 翻转 reverse 改变原数组
console.log(arr.reverse());
console.log(arr);

2、sort()方法【数组排序,返回排序后的数组】
a、sort()不带参数默认为升序

    console.log(arr.sort()); //按照字符串ASSIC码形式比较

b、sort()带指定排序函数
函数返回值:
    正值:交换
    负值:不交换

    console.log(arr.sort(com));
console.log(arr);
function com(a,b){
//return a-b; //升序
//负数a,b不发生交换 a b a<b 负值 不交换; a b a<b 升序排列
//正数数a,b不发生交换 a b a>b 正值 交换; b a b<a 升序排列 //return b-a; //降序 //升序
if(a<=b){
return -1; //负数不发生交换
}else{
return 1; //正数发生交换
}

拓展:【万能比较器】

    var stu = [
{
name:'zhangsan',
age:14,
},
{
name:'lisi',
age:20
}
]; stu.sort(compare('name','升序'));
console.log(stu);
stu.sort(compare('age','降序'));
console.log(stu); //相关调用的比较函数
function compare(attr,rules){
return function(o1,o2){
if(rules === '升序'){
if(o1[attr] <= o2[attr]){
return -1;
}
return 1;
}else{
if(o1[attr] >= o2[attr]){
return -1;
}
return 1;
}
}
}

3、查找最高(最低)的数组值
a.使用sort()方法先进行排序,然后再在排好序的数组中取值
b.使用Math.max.apply()和Math.min.apply()方法

    Math.max.apply(null,array);  //获取array数组中的最大值
Math.min.apply(null,array);  //获取array数组中的最小值

三、截取方法:
1、数组拼接:concat()方法 【不改变原数组】
先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,返回副本数组。
eg:

    var arr = [3,4,5,2,4];
var arr2 = [1,2,3,4,5]; var result = arr.concat(arr2);
console.log(arr); //[3,4,5,2,4]
console.log(result); //[3,4,5,2,4,1,2,3,4,5] var result2 = arr.concat('hello');
console.log(result2); //[3,4,5,2,4,'hello']

自身定义方法myConcat()来实现concat()

    /*
concat()方法
1.不改变原数组,创建副本数组
2.如果参数是数组,展开放入
3.如果是其他参数添加到末尾
4.返回副本
*/
Array.prototype.myConcat = function(param){
//创建副本数组
var array = [];
for(var i=0;i<this.length;i++){
array.push(this[i]);
}
//判断添加数据类型
if(Array.isArray(param)){
for(var j=0;j<param.length;j++){
array.push(param[j]);
}
}else{
array.push(param);
}
return array;
}; var result = arr.myConcat('hello');
console.log(result);
var result2 = arr.myConcat([7,8,9,10]);
console.log(result2);
console.log(arr);

2、数组切割:slice()方法 【不改变原数组】
slice(返回项的起始位置,结束位置);
一个参数:从该参数指定的位置开始,到当前数组末尾的所有项。
两个参数:起始到结束之间的项,但是不包含结束位置的项。
eg:

    //参数是一个为从开始位置截取到末尾;参数是两个的,截取部分为开始位置到结束位置不包括结束位置的值
//返回截取部分的值,不改变原数组
var arr = [123,34,5,67,3,6,8];
var result = arr.slice(2);
console.log(result); //[5,67,3,6,8]
console.log(arr); //[123,34,5,67,3,6,8] var result2 = arr.slice(2,4);
console.log(result2); //[5,67]

3、splice() 【改变原数组】
向数组的中部插入数据将始终返回一个数组,该数组中包含从原始数组中删除的项。
删除:指定一个参数(删除的开始的位置)【删除该参数索引及后面的所有元素】;指定两个参数(删除的起始位置,要删除的项数) 【返回删除的元素组成的数组】
插入:指定三个参数(起始位置,0,要插入的项任意数量的项)
替换:指定三个参数(起始位置,要删除的项数,要插入的任意数量的项)
eg:

    //删除
var arr = [32,4,9,3,0];
var result = arr.splice(1,3);
console.log(result); //[4,9,3]
console.log(arr); //[32,0] //插入
   var arr = [32,4,9,3,0];
arr.splice(1,0,'hello','sss');
console.log(arr); //[32,'hello','sss',4,9,3,0] //替换
//从索引位置为1的删除两项后在开始位置处再插入一些元素
   var arr = [32,4,9,3,0];
arr.splice(1,2,1,2);
console.log(arr); //[32,1,2,3,0]

四、索引方法
indexOf lastindexOf 返回索引或-1
var arr = [2,5,67,'2',3,2,45];
1、indexOf()
从数组开头向后查找,使用全等操作符,找不到该元素返回-1。
参数:第一个参数为要查找的项,第二个参数(可选)为索引开始位置

    //参数:要查找的元素   开始查找的位置
console.log(arr.indexOf(2)); //
console.log(arr.indexOf(2,1)); //
console.log(arr.indexOf(22)); //-1

2、lastIndexOf()
从数组末尾向前查找,使用全等操作符,找不到该元素返回-1。
参数:第一个参数为要查找的项,第二个参数(可选)为索引开始位置

    console.log(arr.lastIndexOf(2));  //
console.log(arr.lastIndexOf(2,3)); //

3.常用于判断数组中是否含有该元素

    if(arr.indexOf(2) != -1){ }

五、迭代方法
参数: 每一项上运行的函数,运行该函数的作用域对象(可选)
1、every()
对数组中的每一运行给定的函数参数,如果该参数函数对每一项都返回true,则该函数返回true
eg:

    var arr = [23,45,1,4,3,45,7];
var result = arr.every(function(item,index,arr){
console.log(this); //{}
return item>20;
},{});
console.log(result); //false

自己定义myEvery()方法来实现every()方法:
eg:

    var arr = [23,45,1,4,3,45,7];

    Array.prototype.myEvery = function(fun,funThis){
//var result;
for(var i=0;i<this.length;i++){
var result = fun.call(funThis,this[i],i,this);
if(!result){
//break;
return result;
}
}
return result;
}; var result = arr.myEvery(function(item,index,arr){
console.log(this); //{}
return item>20;
},{});
console.log(result); //false

2、some(),3、filter(),4、map()使用的数组如下:
var stus = [
        {
                name:'zhangsan',
                age:20
        },{
                name:'lisi',
                age:13
        },{
                name:'wangwu',
                age:12
        }
];
2、some()
对数组中的每一运行给定的函数,如果该函数对任一项都返回true,则返回true
eg:

    //判断是否有未成年人,有返回true,否则返回:false
var result = stus.some(function(item,index,arr){
return item.age<18
});
console.log(result); //true

3、filter()
对数组中的每一运行给定的函数,会返回满足该函数的项组成的数组
eg:

    //filter
//过滤出来所有成年人
var result = stus.filter(function(item,index,arr){
return item.age>18;
});
console.log(result); //查找所有未成年人的名字
//先过滤出所有未成年人再映射出符合条件人名字
var result = stus.filter(function(item,index,arr){
return item.age<18;
}).map(function(item,index,arr){
return item.name;
});
console.log(result);

4、map()
对数组中的每一元素运行给定的函数,返回每次函数调用的结果组成的数组

    //map
//查找处所有人的名字,返回数组
var result = stus.map(function(item,index,arr){
return item.name;
});
console.log(result);
var result = stus.map(function(item,index,arr){
return item.age*2;
});
console.log(result);

5、forEach()
对数组中的每一元素运行给定的函数,没有返回值,常用来遍历元素

    //数组的遍历
var arr = [{
name:'zhangsan'
},{
name:'lisi'
},{
name:'terry'
}];
//向数组各元素对象中添加age属性
var ageInit = 10;
arr.forEach(function(item,index,arr){
item.age = ageInit++;
});
console.log(arr);

js数组【续】(相关方法)的更多相关文章

  1. JS数组的相关方法

    数组创建 JavaScript中创建数组有两种方式,第一种是使用 Array 构造函数: ? 1 2 3 var arr1 = new Array(); //创建一个空数组 var arr2 = ne ...

  2. 小兔JS教程(四)-- 彻底攻略JS数组

    在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...

  3. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

  4. 转→js数组遍历 千万不要使用for...in...

    看到一篇内容还不错,但是排版实在糟糕, 逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误... 第一次因为实在看不下去一篇博客的排版, 为了排版而转载... 转载地址:h ...

  5. js数组操作大全

    原文(http://www.cnblogs.com/webhotel/archive/2010/12/21/1912732.html) 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简 ...

  6. js数组去重的4种方法

    js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...

  7. js 数组处理函数

    本文转载自有有<js 数组处理函数> concat 将参数列表连接到原数组后面形成一个新的数组并返回,原有数组不受影响. var arr = ["a","b& ...

  8. js 数组赋值问题 :值传递还是引用?

    转载于知乎var a = [1,2,3]; var b = a; a = [4,5,6]; alert(b); //[1,2,3] 面试时被问到这样一个问题,竟然从来没试过... 当时直接的理解,数组 ...

  9. JS数组方法汇总 array数组元素的添加和删除

    js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^ var arr = new Array(); arr[0] = "aaa"; arr[ ...

  10. js数组操作

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手,一下狠心,我学! ...

随机推荐

  1. java字符串格式化性能对比String.format/StringBuilder/+拼接

    String.format由于每次都有生成一个Formatter对象,因此速度会比较慢,在大数据量需要格式化处理的时候,避免使用String.format进行格式化,相反使用StringUtils.l ...

  2. Android如何屏蔽home键和recent键

    最近在做一个项目的时候,进入一个 Activity后需要暂时屏蔽掉home键和recent键(back键可以在onKeyDown里面处理),网上找了半天,都是针对旧版本android的方法,andro ...

  3. java.lang.Exception: No tests found matching

    java.lang.Exception: No tests found matching 需要导入junit.jar 和 hamcrest.jar

  4. Java学习-056-Jsoup爬虫获取中国所有的三级行政区划数据(一)

    在涉及地址服务时,经常需要用到地址信息的获取,而行政区划可能不定期的发生变化,所以我们需要获取最新的行政区划信息.因行政区划数据量较大,Java中可以使用Jsoup进行数据的获取.处理. 大家经常用到 ...

  5. Apache限制IP并发数和流量控制

    使用mod_limitipconn模块限制IP并发连接数安装: wget http://dominia.org/djao/limit/mod_limitipconn-0.24.tar.bz2 tar ...

  6. 【Spring Boot学习之四】Spring Boot事务管理

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.springboot整合事务事务分类:编程事务.声明事务(XML.注解),推荐使用注解方式,springboot默 ...

  7. AspNetCore 2.2 新特性---HealthCheck

    网站部署上线后, 总是担心网站是否工作正常, 内存压力是否很大, CPU是否超负荷了?当然, 我们有一大套系统, perfromance counter, 监控软件来监视运维生产系统.但是这些第三方软 ...

  8. 解决 plsql 启动报错 Initialization error

    由于文件  oci.dll   路径没添加  1.点击edit 2.点击PL/SQL 3.弹框中 填写oci.dll文件的完整路径!完整路径!完整路径!完整路径!完整路径!完整路径!完整路径!完整路径 ...

  9. 【更新】Java发送邮件:个人邮箱(QQ & 网易163)+企业邮箱+Android

    这次把两种情况仔细说一下,因为好多人问啦. 第一种:企业邮箱 这里在这一篇已经说的很清楚了,这次不过是建立个maven工程,引入了最新的javamail依赖,代码优化了一下.直接上代码 pom < ...

  10. [转帖]NSO到底是个什么样的公司?揭秘三叉戟0day的缔造者

    NSO到底是个什么样的公司?揭秘三叉戟0day的缔造者 dawner2016-09-07共248912人围观 ,发现 3 个不明物体其他安全报告 https://www.freebuf.com/art ...