逆战班:js数组常用方法

逆战班:js数组常用方法
一、数组的使用部分说明
1、数组实际上就是来源对象,脱胎于对象,继承于对象
2、在对象中属性名填入任何内容都会隐式转换为字符
3、在数组中所有的下标都会转换为number,如果不能转换为number的(也就是转换后是NaN的),就会默认添加对象的属性名
4、数组的长度,仅记录下标的个数,不包含属性数量
5、数组不可以使用点语法获取下标变量,但是可以使用点语法取属性
6、数组的循环是根据下标的数字从0开始循环到最大下标,有序;对象是循环所有属性名,无序;对象的属性遍历是根据对象属性名添加的顺序。
二、数组的遍历方法:
所有方法以下面定义的数组为遍历对象
var arr = [5, 2, 7, , 4, 9, 6];
arr[“a”] = 10;
1、方法一:for循环
for(var i=0;i<arr.length;i++){
console.log(i);
console.log(“索引值”+i+":"+arr[i]);
console.log(arr[i]===undefined)
}
2、方法二:for in
for (var num in arr) {
console.log(num);
// 数组的下标,如果给让的是字符。会转换成数值
console.log(arr[num]);
}
3、for和for in的区别:
(1)for in不会遍历空元素,for会遍历空元素
(2)for in可以遍历到数组的属性,for只能遍历数组所有下标,不能遍历属性
(3)属性包含字符和下标(数字)
(4) 当使用for in遍历时,会将所有属性包括下标都会转为字符型。
(5) arr[0]=5; //0就是arr的下标,也是arr的属性
arr[“aa”]=10; // aa就是arr的属性
4、用for循环完成不遍历空元素。
(1)var arr=[2,4,6,8,10];
for(var i=0;i<arr.length;i++){
if(!(i in arr))continue;
console.log(arr[i]);
}
(2)for(var i=0;i<arr.length;i++){
if(i in arr)console.log(arr[i]);
}

三、数组的复制应用
1、var obj={a:1,b:2,c:3};
var o={};
for(var prop in obj){
o[prop]=obj[prop];
}
// 这样o就会把obj都复制过来
// 对象赋值以后,所有内容都没有引用关系了
obj.a=100;
console.log(o.a);
注:一个对象赋值形成一个新对象
要解决这类问题,就考虑到对象深复制
2、 var obj={
a:1,
b:{
a:1,
b:2
}
}
var o={};
// 这样只能复制解除最外层的引用关系,这种叫做浅复制
for(var prop in obj){
o[prop]=obj[prop];
}
obj.a=10;
obj.b.a=10;
console.log(o);
四、push
1、push 在数组尾部添加一个或者多个元素,并且返回数组的新长度
2、arr.push(“a”,“b”);
3、arr.push(6);//在数组的尾部插入一个新元素
4、 arr.push(6,7,8);//在数组的尾部插入多个新元素
5、var a=arr.push(6,7,8);//通过添加到尾部元素后返回数组的新长度
五、unshift
1、unshift在数组头部添加一个或者多个元素,并且返回数组的新长度
2、arr.unshift(0);//在数组的头部插入一个新元素
3、arr.unshift(-3,-2,-1,0);//在数组的头部插入多个新元素
4、var a=arr.unshift(-3,-2,-1,0);//返回数组的新长度
六、pop
1、pop 删除数组尾部的最后一个元素,并且将这个被删除的元素返回
2、arr.pop();//pop中没有参数,删除数组的最尾部一个元素
3、var a=arr.pop();//pop删除数组的最尾部一个元素,并且将被删除的元素返回
4、arr.length–; //等同 速度更快,但是不会返回被删除的元素
arr.pop();//速度慢,但是会返回被删除的元素
七、Shift
1、shift() 删除数组的第一个元素,并且返回被删除的元素
2、arr.shift();//将数组的第一个元素删除
3、var a=arr.shift();//将数组的第一个元素删除,并且返回这个被删除的元素
4、说明:不管删除还是添加都会改变数组的长度;
八、concat
1、数组的合并,合并后会返回一个新数组,原来的两个数组不会变化
var arr2=arr.concat(arr1);
2、数组除了可以合并数组,也可以合并元素,将多个元素与原数组合并,返回新数组
var arr3=arr.concat(0,-1,-2); //负数为倒数;
3、concat既可以合并元素,也可以合并数组
var arr4=arr.concat(0,arr1,[“A”,“B”]);
4、如果直接使用concat,就可以完成数组的复制功能
var arr5=arr.concat();
console.log(arr5);
九、join
1、 join就是将数组的每个元素以指定的字符连接形成新字符串返回
var arr=[1,2,3,4,5];
2、将数组合并为字符串返回,默认使用,连接
var str=arr.join();
3、在这里join的参数是字符串的连接符
var str=arr.join("|");
4、"“作为连接符,会将数组元素首尾相连成为字符串
var str=arr.join(”");
5、join的重构:
function join(arr,separ){
if(separ=undefined) separ=",";
var str="";
// 遍历数组
// 最后一个不循环
for(var i=0;i<arr.length-1;i++){
// 在str字符串上累加每一个元素和连接符
str+=arr[i]+separ;
}
// 直接累加在最后
str+=arr[i];
return str;
}
var str=join(arr,"|");
console.log(str);
6、注:toString直接将数组转换为字符串
var arr=[1,2,3,4,5];
var str=arr.toString();
十、splice
1、这个方法可以从指定的位置删除给定数量的元素,并且在这个位置插入需要的元素,并且返回被删除的元素组成的新数组
2、 arr.splice(从什么位置开始,删除多少个元素,要插入的元素);
3、没有任何参数时,返回一个空数组
var arr1=arr.splice();
4、第一个参数是0,表示从第0位开始,第二个参数删除多少个没有填,意味着删除到尾部
var arr1=arr.splice(0);//将所有数据转移到新数组
5、从第0位开始删除3个元素,返回到新数组arr1
var arr1=arr.splice(0,3);
6、从第几位开始可以是负数,从后向前数(倒数),因为没有给要删除的数量,因此删除到尾部
var arr1=arr.splice(-2);
7、从数组的第0位开始,删除1个元素,并且在这个位置插入一个元素 -1,替换
var arr1=arr.splice(0,1,-1);
8、数组的最后一位替换位0
var arr1=arr.splice(-1,1,0);
9、将数组中第二位开始两位元素替换为10,11
var arr1=arr.splice(2,2,10,11);
十一、slice
1、含义:按指定位置截取复制数组的内容,只能从前向后截取
2、语法:arr.slice(从什么位置开始,到什么位置之前结束)
注:第二个参数不写,默认截取到尾部
3、var arr1=arr.slice();//复制数组arr
4、var arr1=arr.slice(0); //复制数组
5、var arr1=arr.slice(3);//从第三位截取到尾部复制
6、var arr1=arr.slice(-2);//从倒数第二位开始截取到尾部
7、var arr1=arr.slice(-3,-1);//从倒数第三位到倒数第一位
十二、indexOf
注:从前向后找
1、 数组.indexOf(要查询得元素,从什么位置开始查询)位置就是下标
2、若查到则返回改元素的下标,查不到则返回-1;
十三、lastindexOf
注:从后往前找
1、语法:lastIndexOf(查找得元素,从什么位置开始查找)
2、用到去重中:
var arr=[1,3,1,2,3,5,2,3,4,6];
var arr1=[];
for(var i=0;i<arr.length;i++){
if(arr1.indexOf(arr[i])
=-1){
arr1.push(arr[i]);
}
}
console.log(arr1);
十四、遍历方法
1、arr.forEach(function(数组中的元素,每个元素对应的下标,数组自身){

    })
   注:使用forEach可以跳过空元素
    例如:
var arr=[2,4,6,,8,3,2];
    	var arr1=[];
    	arr.forEach(function(item,index){
        		arr1[index]=item;
    	})
   	 console.log(arr1);
     说明:(1)forEach在执行过程中不会复制一个数组去操作,它在原数组中操作。

(2)forEach没有返回值
var arr1=arr.forEach(function(item,index,arr){
// 使用return无效 });
2、map
map会返回一个与原数组长度相等的新数组
在map中使用return 就是在对应的下标中添加对应的数据
var arr=[3,5,7,9,1,2,4];
var arr2=arr.map(function(item,index,arr){
console.log(item,index,arr);
return “a”;
return item+10;
});
console.log(arr2);
十五、some和every
1、some
查找数组中是否有满足条件的元素,如果有就返回true,如果没有就返回false
遍历数组,如果有一个满足条件的元素,都会直接返回true,不继续向后遍历
2、every
判断数组中是否每一个都满足条件,如果有一个不满足条件,直接跳出
否则的话所有都满足时返回为ture
十六、filter
1、var arr1=arr.filter(function(item,index,arr){
返回 条件
});
筛选数组中满足条件的结果
2、可用于数据驱动显示,比如购物结算。
十七、reduce
1、arr.reduce(function(value,item,index,arr){
// 循环的次数是数组的个数-1
// value就是上次遍历return的值,第0次遍历时(最开始时是数组的第0项)
console.log(value);
return value+1
})
2、从数组的第1位开始遍历,第0位没有遍历,下标从1开始,刚开始value是数组的第0项,后面每次value都是undefined,如果在函数中使用return 就会将返回值在下次数组的遍历中赋予value
3、数组.reduce(回调函数(累积值,元素,下标,数组){},初始值)
如果reduce没有设置初始值,累计值是数组的第0位元素,遍历从下标1开始
如果reduce设置了初始值,累积值就是从这个初始值开始,遍历从下标0开始
十八、判断是否是数组
1、typeof
console.log(typeof arr);
判断元素是否是数组,如果是数组返回true否则返回false
2、isArray
console.log(Array.isArray(arr));
判断元素是否是数组,如果是数组返回true否则返回false(ES6)
十九、参数列表
1、arguments
function fn(){
// arguments 这个对象仅能在函数内调用
// 函数外没有这个对象
console.log(arguments);//类数组列表,伪数组
}
2、所有的列表(类数组,伪数组)都可以通过[下标]的方式调用
3、arguments.callee
function fn1(){
// arguments.callee就是当前函数 fn1
console.log(arguments.callee);

    }
    fn1(); 

4、arguments.callee可完成匿名函数的递归
var i=0;
(function(){
i++;
if(i<10) arguments.callee();
// 完成匿名函数的递归
})();
5、arguments.callee.caller
function fn1(){
//如果该函数是回调执行的,arguments.callee.caller就是回调执行当前函数外的函数
console.log(arguments.callee.caller);
}
function fn2(fn){
fn();
}
fn2(fn1);
注:ES6中arguments.callee arguments.callee.caller被禁止使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值