一、数组的栈,队列方法【调用这些方法原数组会发生改变】
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. Jenkins 使用 SonarQube 扫描 Coding

    Jenkins 使用 SonarQube 扫描 Coding   系统环境: Jenkins 版本:2.176 SonarQube 版本:7.4.0 一.SonarQube 介绍 1.SonarQub ...

  2. Docker运行图形化程序

    原理 Docker支持图形化程序,是利用Linux的X11技术. 相关文章 如何在Docker容器中启动D-Bus 引文详情 如何在Docker容器中启动D-Bus 翻译自 https://georg ...

  3. eclipse从git下载的maven项目需要转成maven才可是使用main方法启动

    导入git项目: 选择导入git项目有会有两个选项:一个是从本地git仓库中导入项目,一个是从github远程仓库中导入项目 我们选择从远程仓库中导入项目: 然后选择本地存放该项目的git仓库 然后选 ...

  4. jetty源码下载

    jetty下载地址:https://www.eclipse.org/jetty/download.html Release         9.4.20.v20190813 .zip .tgz api ...

  5. redis 链接

    一.redis启动: 本地启动:redis-cli 远程启动:redis-cli -h host -p port -a password 例如:redis-cli -h r-2mlmkmxu7.red ...

  6. SpringBoot入门-集成mybatis(四)

    pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...

  7. 【GMT43智能液晶模块】例程十五:LAN_TCPC实验——以太网数据传输

    源代码下载链接: 链接:https://pan.baidu.com/s/1bFX8_UpUlML29oqoDGaw5g提取码:mrf5 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43购 ...

  8. Java中遍历ConcurrentHashMap的四种方式

    //方式一:在for-each循环中使用entries来遍历 System.out.println("方式一:在for-each循环中使用entries来遍历"); for(Map ...

  9. git 本地删除修改文件后从远程拉取

    单个文件 git checkout a.php 当前目录 git checkout .

  10. [MySQL] MySQL存储过程 事务transaction 数据表重建

    直接上代码 -- 删除存储过程 DROP PROCEDURE IF EXISTS `renew_message_queue`; -- 添加; 的转义 DELIMITER ;; CREATE PROCE ...