// 数组基本属性及方法
// concat,合并数组,原数组不改变
var arr=[1,2,3,4,5]
var arr1=arr.concat(1,2,3);
console.log(arr);//1,2,3,4,5
console.log(arr1);//1, 2, 3, 4, 5, 1, 2, 3
// 用concat实现数组扁平化
var arr=[1,2,[500,600],3,[10,20,[300,400]]];
var arr1=[]
function arrChange(arr){
for(var i=0;i<arr.length;i++){
if(arr[i].length){
arrChange(arr[i])
}else{
console.log(arr1)
arr1=arr1.concat(arr[i])
}
}
}
arrChange(arr)
console.log(arr);//原数组不变
console.log(arr1);//扁平化后的一维数组
// push添加到数组尾部,返回值为新数组长度
var arr=[1,2,3,4,5];
arr.push(10,20)
console.log(arr);//1,2,3,4,5,10,20
// pop删除数组最后一项,返回被删除的元素
var arr=[1,2,3,4,5];
arr.pop()
console.log(arr);//1,2,3,4
// unshift在数组头部添加元素,返回新数组长度
var arr=[1,2,3,4,5];
arr.unshift(10,20)
console.log(arr);//10,20,1,2,3,4,5
// shift删除第一项,返回被删除的元素
var arr=[1,2,3,4,5];
arr.shift()
console.log(arr);//2,3,4,5
// splice,删除、替换,返回被替换掉的元素组成的数组
var arr=[1,2,3,4,5,6];
var arr1=arr.splice(0);
console.log(arr)//[]
console.log(arr1)//1,2,3,4,5,6
var arr=[1,2,3,4,5,6];
var arr1=arr.splice(0,1);
console.log(arr)//2,3,4,5,6
console.log(arr1)//1
var arr=[1,2,3,4,5,6];
var arr1=arr.splice(0,2,100);
console.log(arr)//100,3,4,5,6
console.log(arr1)//1,2
// join,将数组转换成用规定字符分割的字符串,原数组不改变,返回字符串
var arr=[1,2,3,4,5]
var arr1=arr.join('+');
console.log(arr)//1, 2, 3, 4, 5
console.log(arr1)//1+2+3+4+5
// indexOf查找数组中是否有某一项,有返回下标,无返回-1,从前向后查找
// indexOf参数1为要查找的元素,参数2位从哪里开始查找
var arr=[1,2,3,4,5,1,2,3,4,5];
var index=arr.indexOf(2,2);
console.log(index);//6
var index=arr.indexOf(2);
console.log(index);//1
// 假如一个元素在数组中出现多次,获取每次的下标
// arr元素所在数组,item要查找的元素
// 第一种
function getArrIndex(arr,item){
var arrIndex=[]
var index=0
for(var i=0;i<arr.length;i++){
// arrIndex存储查到的下标,判断如果查找到了,就让下次查找从当前下标的下一项开始
if(arrIndex.length){
index=index+1
}
index=arr.indexOf(item,index);
if(index<0){
break
}
arrIndex.push(index)
}
return arrIndex
}
var arr=[1,2,3,4,5,5,1,2,3,4,5,6,7,5];
var indexList=getArrIndex(arr,11)
console.log(indexList)//[]
var indexList=getArrIndex(arr,5)
console.log(indexList)//[4,5,10,13]
// 第二种
function getArrIndex(arr,item){
// 深复制元素所在数组
var arrCopy=JSON.parse(JSON.stringify(arr));
var arrIndex=[]
for(var i=0;i<arrCopy.length;i++){
var index=arrCopy.indexOf(item)
if(index>-1){
// 每次从第0位开始查找,查找到直接删除元素,这样可以保证数组长度不变
delete arrCopy[index]
arrIndex.push(index)
}
}
return arrIndex
}
var arr=[1,2,3,4,5,5,1,2,3,4,5,6,7,5];
var indexList=getArrIndex(arr,1)
console.log(indexList)//[0,6]
var indexList=getArrIndex(arr,5)
console.log(indexList)//[4, 5, 10, 13]
// lastIndexOf查找元素位置,从后向前查找
var arr=[1,2,6,3,4,5,3,6];
var index=arr.lastIndexOf(6)
console.log(index)//7
// slice复制数组的数据,参数1从哪开始,参数2到哪结束
var arr=[1,2,3,4,5,6]
var arr1=arr.slice(0,2)//截取下标为0和1的两位
var arr1=arr.slice(0)//截取全部
var arr1=arr.slice(-1)//截取最后一位
var arr1=arr.slice(-3,-1)//截取倒数第3位和第4位
var arr1=arr.slice(0,-1)//截取开始到倒数第2位
console.log(arr);
console.log(arr1);
// reverse:倒序数组,但不排序,返回的数组就是原数组,原数组改变;
// 例如:
var arr=[1,2,5,4,3,6,7];
var arr1=arr.reverse();
console.log(arr1);
// 结果就是7,6,3,4,5,2,1;
// 不进行排序,只是单纯的反过来排列
// 数组的归并和筛选
// 筛选filter
var arr=[1,2,3,4,5,6,7,8,9]
var arr1=arr.filter(item=>{
if(item>5){
return item>5
}
})
console.log(arr)//[1,2,3,4,5,6,7,8,9]
console.log(arr1)//[6,7,8,9]
// 归并reduce,sum基础值,不赋值就是数组第一项,item是每一项
// reduce共有四个参数,后两个分别为下标和数组本身
var arr=[1,2,3,4,5,6,7,8,9]
var sum=arr.reduce((sum,item)=>{
console.log(sum,item)
return sum+item
},100)
console.log(sum)//145