数组中常用方法
- 数组也是对象,也是由键值对组成,属性名为数字(索引)从0开始,length属性是数组的长度
- 数组中每一项的值可以是任何数据类型的
- 方法的作用
- 方法的参数
- 方法的返回值
- 原有数组是否改变
var ary= [1,2,3] //一维数组
var ary2 = [
{
name: 'aaa',
age :'33'
},
{
name: 'aaa',
age :'33'
}
] //多维数组
1 . push方法
- 作用: 向数组“末尾”追加新内容
- 参数: 追加的内容(一个或多个)
- 返回值: 新增后的数组的长度
- 原有数组: 改变
var ary = [1,2,3];
ary.push(100); //4
console.log(ary) //[1,2,3,100]
ary.push(100,{name:'aaa'}) //6
console.log(ary) //[1,2,3,100,100,{name:'aaa'}]
2. pop方法
- 作用: 删除数组最后一项
- 参数: 无
- 返回值: 被删除的哪一项内容
- 原有数组: 改变
var ary = [1,2,3];
ary.pop(); // 3
console.log(ary) //[1,2]
3. shift方法
- 作用: 删除数组第一项
- 参数: 无
- 返回值: 被删除的哪一项内容
- 原有数组: 改变
var ary = [1,2,3];
ary.shift(); // 1
//原有后面的每一位索引向前进一位
console.log(ary) //[2,3]
4. unshift方法
- 作用:向数组第一位追加新内容
- 参数: 新增的内容
- 返回值: 新增后数组的长度
- 原有数组: 改变
var ary = [1,2,3];
ary.unshift(0); // 4
console.log(ary) //[0,1,2,3]
5. splice方法
- 作用:可以删除指定位置的内容,向数组制定位置增加内容,还可以修改指定位置的信息
删除:
ary.splice(n,m) //从索引n开始,删除m个内容,把删除的部分以一个新数组返回,原有数组改变
var ary = [1,2,3,4,5,6];
ary.splice(2,3); // [3, 4, 5]
console.log(ary) //[1,2,6]
ary.splice(2); //不传m或者传的比数组的length大,删除到末尾 [2,6]
console.log(ary) //[1]
//扩展: 删除最后一位的几种办法
ary.pop();
ary.length--;
ary.splice(ary.length-1);
delete ary.length-1 //只把元素给删了,length没变
//扩展: 最后一位新增的几种办法
ary.push(100);
ary.splice(ary.lengeth,0,200);
ary[ary.length] = 300;
新增/修改:
ary.splice(n,0,x,...) //新增
//从索引n开始删除0个内容(没删除),把X或者更多需要插入的内容存放到数组中索引N的“前面”,原有数组改变
var ary = [1,2,3,4,5,6];
ary.splice(2,0,100,200,300); // [] 因为没删除返回空数组
console.log(ary) //[1,2,100,200,300,3,4,5,6]
ary.splice(n,m,x,...) //修改 把原有的内容删除,替换成新增的内容
var ary = [1,2,3,4,5,6];
ary.splice(2,3,100,200,300); // [] 因为没删除返回空数组
console.log(ary) //[1,2,100,200,300,6]
6. slice方法
- 作用:按照条件查找出其中的部分内容
- 参数: n,m(从n开始查到到m处,不包括m)
- 返回值: 查找到的内容的新数组
- 原有数组: 不改变
var ary=[12,23,34,35,56,67,78,89,90]
ary.slice(2,7)//[34,35,56,67,78]
ary.slice(2)//[34,35,56,67,78,89,90]
ary.slice(0)//[12,23,34,35,56,67,78,89,90] 克隆了原数组
ary.slice()//[12,23,34,35,56,67,78,89,90] 克隆了原数组,但是指向的空间地址是改变的
ary.slice(-3,-1)//[78,89] 负数运算规则:数组长度+负数索引
7. concat方法
- 作用:实现多个数组拼接
- 参数:数组或者值
- 返回值: 拼接后的新数组
- 原有数组: 不变
var ary1 = [12,23],
ary2 = [34,35,56],
ary2 = [67,78,89,90];
ary1.concat(ary2,'string',ary3)//[12,23,34,35,56,'string',67,78,89,90]
[]..concat(ary1,ary2,'string',ary3)//[12,23,34,35,56,'string',67,78,89,90]
//基于空数组拼接,在小括号中排列拼接的顺序,空数组不占内容的位置
8. 把数组转化为字符串toString、join
- 作用:join除了可以转字符串,还可以改变拼接符
- 参数:连接符(不传只转字符串)
- 返回值: 拼接或者转换后的字符串
- 原有数组: 不变
var ary = [67,78,89,90];
ary.join() //'67,78,89,90'
ary.join(',') //'67,78,89,90'
ary.join('+') //324
//基于join可以实现数组中每一项求和的功能
9. reverse方法
- 作用:把数组倒序排列
- 参数:无
- 返回值: 排列后的新数组
- 原有数组:改变
var ary = [1,2,3,4,5,6];
ary.reverse() //[6,5,4,3,2,1]
10. sort方法
- 作用:数组排序
- 参数:无、函数
- 返回值: 排列后的新数组
- 原有数组:改变
var ary = [1,2,3,12,5,8];
ary.sort() //[1,12,2,3,5,8] 不传参数,只处理10以内的数字排序
ary.sort(function(a,b){
return a-b //升序
return b-a //降序
})
11. indexOf/lastIndexOf方法
不兼容ie6/7/8
- 作用:检测当前值在数组中第一次/最后一次出现位置的索引
- 参数:要检测的值
- 返回值: 索引值
- 原有数组:不变
var ary = [1,2,3,12,5,8];
ary.indexOf(2) //1
ary.indexOf(20) //-1
//基于indexOf检测,如果有这一项,返回所在位置的索引,如果没有,返回-1
var ary = [1,2,3,12,5,8];
if(ary.indexOf(100)>-1){//indexOf一般是验证数组中是否包含这一项
//ary中包含100这一项
}
12. every
不兼容ie6/7/8
- 作用:检测数组是否全部符合条件
- 参数:要检测的值
- 返回值: 布尔值
- 原有数组:不变
let arr = [1,2,3,4,5]
let arr1 = arr.every( (value, index) =>value<5)
console.log(arr1) // false
let arr2 = arr.every( (value, index) =>value<6)
console.log(arr2) // true
13. some
不兼容ie6/7/8
- 作用:检测数组只要有一项符合条件即返回true
- 参数:要检测的值
- 返回值: 布尔值
- 原有数组:不变
let arr = [1,2,3,4,5]
let arr1 = arr.some( (value, index) =>value<5)
console.log(arr1) // true
let arr2 = arr.some( (value, index) =>value > 5)
console.log(arr2) // false
14. forEach 、map
- forEach替代for循环,没有return,不会返回新数组
- map映射数组 有return 会返回新数组
var arr=[2,2,3,4,4,5,6,6]
//forEach
var res = arr.forEach((item,index)=>{
item = item * 2;
return item;
})
console.log(res); //undefined
//map
var res = arr.map((item,index,arr)=>{
item = item * 2;
return item;
})
console.log(res);// [4, 4, 6, 8, 8, 10, 12, 12]
15. filter
- 过滤数组,返回符合条件的新数组
let arr = [1,2,3,4,5]
console.log(arr.filter( (value, index) => value<5))
//[1, 2, 3, 4]