数组方法
//前增
/*
unshift(元素,元素,……)
作用: 在数组前面添加元素。
返回值: 返回新增后数组的长度
是否影响原数组: 是
*/
var arr = [5,6,7,8,9];
console.log(arr.unshift(true,[1,2],false));
console.log(arr);
//后增
/*
push(元素,元素,……)
作用: 在数组后面添加元素。
返回值: 返回新增后数组的长度
是否影响原数组: 是
*/
var arr = [5,6,7,8,9];
console.log(arr.push(true,[1,2],false));
console.log(arr);
//前删 (一次只能删一次)
/*
shift()
作用: 删除数组中第1个元素
返回值: 被删除的元素
是否影响原数组: 是
*/
var arr = [5,6,7,8,9];
console.log(arr.shift());
console.log(arr);
//后删 (一次只能删一次)
/*
pop()
作用: 删除数组中最后一个元素
返回值: 被删除的元素
是否影响原数组: 是
*/
var arr = [5,6,7,8,9];
console.log(arr.pop());
console.log(arr);
//如何删除全部
var arr = [5,6,7,8,9];
//不确定循环次数
//while, do while
while(arr.length) arr.pop();
console.log(arr);
//改
/*
splice(start,delLength,newEle,newEle,……)
start: 从哪个下标位置开始
delLenght: 删除几个元素
newEle: 新元素
作用: 在数组的任意位置进行增、删、改的操作。
返回值: 被删除的元素数组
是否影响原数组: 是
*/
var arr = [5,6,7,8,9];
console.log(arr.splice(0)); //[5,6,7,8,9]
console.log(arr); //[]
var arr = [5,6,7,8,9];
console.log(arr.splice(2)); //[7,8,9]
console.log(arr); //[5,6]
var arr = [5,6,7,8,9];
console.log(arr.splice(1,2)); //[6,7]
console.log(arr); //[5,8,9]
var arr = [5,6,7,8,9];
console.log(arr.splice(1,2,true,false)); //[6,7]
console.log(arr); //[5,true,false,8,9]
var arr = [5,6,7,8,9];
console.log(arr.splice(1,0,true,false)); //[]
console.log(arr); //[5,true,false,6,7,8,9]
//截
/*
slice(start,end)
start: 从哪里开始 (包含)
end: 到哪里结束 (不包含)
作用: 截取数组中指定范围的元素
返回值: 被截取到的元素数组
是否影响原数组: 否
*/
var arr = [5,6,7,8,9];
console.log(arr.slice(1)); //[6,7,8,9]
console.log(arr.slice(1,4)); //[6,7,8]
console.log(arr.slice(4,1)); //[]
console.log(arr.slice(-4,-1)); //[6,7,8]
console.log(arr.slice(0,-1)); //[5,6,7,8]
console.log(arr.slice(0,arr.length - 1)); //[5,6,7,8]
console.log(arr); //[5,6,7,8,9]
//拼
/*
concat(newEle,newEle,……)
作用: 将新元素拼接到指定数组的末尾。
(如果新元素是一个数组,则去掉最外层的[],将里面的内容进行拼接)
返回值: 拼接后的新数组
是否影响原数组: 否
*/
var arr = [5,6,7,8,9];
console.log(arr.concat([1,[2,3]])); //[5,6,7,8,9,1,[2,3]]
console.log(arr); //[5,6,7,8,9]
//复 (面试题: 至少写两种复制数组的方法)
var arr = [5,6,7,8,9];
function fnCopyArr(arr){
return arr.slice(0);
}
function fnCopyArray(arr){
return arr.concat();
}
function fnCloneArr(arr){
var list = [];
for(var i = 0,len = arr.length;i < len;i ++){
list[i] = arr[i];
}
return list;
}
console.log(fnCopyArr(arr));
console.log(fnCopyArray(arr));
console.log(fnCloneArr(arr));
//逆序排
/*
reverse()
作用: 将数组元素逆序存放
返回值: 逆序后的数组
是否影响原数组: 是
*/
var arr = [5,6,7,8,9];
console.log(arr.reverse()); //[9,8,7,6,5]
console.log(arr); //[9,8,7,6,5]
//按编码排
/*
sort()
作用: 将数组中的元素按字符编码从小到大排序
返回值: 排序后的数组
是否影响原数组: 是
sort(function(a,b){return a - b;}): 按数字从小到大排序
sort(function(a,b){return b - a;}): 按数字从大到小排序
*/
var arr = [3,2,10,20,11];
//console.log(arr.sort()); //[10, 11, 2, 20, 3]
//console.log(arr); //[10, 11, 2, 20, 3]
//数组元素按照数字从小到大排列
console.log(arr.sort(function(a,b){return a - b;}));
//数组元素按照数字从大到小排列
console.log(arr.sort(function(a,b){return b - a;}));
//转
//toString() (面试题:不是数组的方法,是Object对象的方法,数组继承到的方法)
/*
数字.toString(2-36): 将数字转为指定进制的字符串
数组.toString(): 将数组转为字符串
*/
var arr = [1,2,3,4,5];
console.log(arr.toString());
console.log(arr);
//join ('连接符')
/*
作用: 将数组转为以指定连接符连接成的字符串
返回值: 字符串
是否影响原数组: 否
*/
var arr = [1,2,3,4,5];
console.log(arr.join(''));
console.log(arr);
var obj = {};
console.log(obj);
console.log(obj.toString());
alert(obj);
alert(obj.toString());
var i = 10;
console.log(i.toString(2)); //'1010'
console.log(i.toString(8)); //12
console.log(i.toString(16)); //'a'
//ES5新增 (都不会影响原数组)
/*
indexOf(元素,start): 查找元素在数组中第一次出现的下标位置,如果没有,则返回 -1
lastIndexOf(元素,start) : 查找元素在数组中从右向左查找第一次出现的下标位置,如果没有找到,返回 -1
*/
// 0 1 2 3 4 5 6 7 8
var arr = [1,2,1,2,3,2,12,2,4];
console.log(arr.indexOf(2)); // 1
console.log(arr.indexOf(22)); //-1
//第一个参数是查找的元素
//第二个参数是从哪个下标位置开始向右查找
console.log(arr.indexOf(2,2)); // 3
//第二个参数是从哪个下标位置开始向左查找
console.log(arr.lastIndexOf(2)); //7
console.log(arr.lastIndexOf(2,7)); //7
console.log(arr.lastIndexOf(2,6)); //5
//forEach(function(value,index,array){}): 遍历数组
var arr = [1,2,3,4,5,6];
var sum = 0;
arr.forEach(function(value,index){
//value: 代表数组中的每一个元素
//index: 代表数组中的每一个下标
//sum += value;
console.log('下标:' + index,'元素:' + value);
})
alert(sum);
//map(function(value,index,array){return ...}): 映射 (一一映射) 遍历数组,返回数组
var list = arr.map(function(value,index){
return value + 1;
})
console.log(arr,list);
//every(function(value,index,array){return ...}): 检测数组中每一个元素,如果有一个元素的条件返回false时,则直接退出循环,返回false; 如果所有元素都返回true时,最终返回true
var arr = [100,99,89,95,98];
var bool = arr.every(function(item){
console.log(item);
return item >= 90;
})
console.log(bool);
//some(function(value,index,array){return ...}): 检测数组中每一个元素,如果有一个元素的条件返回true,则直接退出循环,返回true; 如果所有元素都返回false时,最终返回false
var boo = arr.some(function(value){
console.log(value);
return value < 90;
})
console.log(boo);
//filter(function(value,index,array){return ...}): 过滤-条件,返回数组
var list = arr.filter(function(item){
return item >= 90;
})
console.log(list);
//reduce(function(prev,next,index,array){return ...}): 归并
var arr = [100,99,89,95,98];
var sum = arr.reduce(function(prev,cur){
console.log(prev,cur);
//prev = 100,cur = 99
//prev = 199,cur = 89
//prev = 288,cur = 95
//prev = 383,cur = 98
//prev = 481,cur = 没有值了
return prev + cur;
});
var sum = arr.reduce(function(prev,cur){
console.log(prev,cur);
//prev = 0,cur = 100
//prev = 100,cur = 99
//prev = 199,cur = 89
//prev = 288,cur = 95
//prev = 383,cur = 98
//prev = 481,cur = 没有值了
return prev + cur;
},0); //第二个参数: 是给prev的初始化值
console.log(sum);