1.数组基础
1.数组里可以储存任意数据类型
2.Arr.length返回数组长度
3.增加数组 Arr[3]=4;
Arr[arr.length]=5;(最大下标)
可以使用length实现动态添加效果
4.数组也是一个引用数据类型
构造函数的创建 (字面量创建[] 对象{} )
var arr1 = new Array(5);
arr1[0] = '张三';
arr1[1] = '李四';
arr1[2] = '王五';
console.log(arr1);
console.log(arr1.length)`
创造一个数组包含1-100 ( 循环创建)
var nums = [];
for(var i=0;i<100;i++){
nums[i] = i+1;
}
console.log(nums);
数组遍历(将每一个成员提取一次)// for循环 for…in循环
for(var i=0;i<nums.length;i++){
nums[i] = '数字:'+ nums[i];//可以做很多操作
}
console.log(nums);
for( var k in nums ){
console.log( nums[k]);//可以做很多操作
}
数组也是引用数据类型 (浅拷贝)
var arr3 = [1,2,3];
var arr4 = arr3;
arr4[3] = 4;
console.log(arr3);
2.数组的深浅拷贝
1.浅拷贝会改变原数组
2.数组实现深拷贝
1. var arr3 = [1,2,3];
var arr5 = [];
for(var k in arr3){
arr5.push(arr3[k]);
}
console.log(arr5);
2. var arr6 = arr3.concat();//数组拼接函数,返回新数组.
3.将可迭代对象或者类数组对象转换成真数组
类数组对象,有下标,有length属性
var obj = {
‘0’:‘12’,
‘1’:‘13’,
‘length’:‘2’
}// 类数组对象
转换方法
console.log(Array.from(obj));//es6的方法
4.可迭代(iterable)和类数组(array-like)
有两个看起来很相似,但又有很大不同的正式术语。请你确保正确地掌握它们,以免造成混淆。
Iterable 如上所述,是实现了 Symbol.iterator 方法的对象。
Array-like 是有索引和 length 属性的对象,所以它们看起来很像数组。
!字符串和数组默认是可迭代的对象
5.数组操作
如何检测一个数据是数组类型
console.log(arr instanceof Array);
Array.inArray(array);
//数组类型判断并转换
var obj_arr = {'0':'1','length':'1'};
if(!obj_arr instanceof Array){
obj_arr = Array.from(obj_arr);
}
if(!Array.inArray(obj_arr)){
obj_arr = Array.from(obj_arr);
}
序列化和反序列化
1. JSON方法一般用于对象,数组中有对象也可以用JSON方法
var arr = ['zhangsan','lisi','wangwu'];
var arr_str = JSON.stringify(arr);
console.log(arr_str);
var new_arr = JSON.parse(arr_str);
console.log(new_arr);
!如下,数组中有对象
var arr = [
{
id:0,
name:'sdji',
age:23,
sex:'男'
},
{
id:1,
name:'ssdsdi',
age:23,
sex:'男'
},
{
id:2,
name:'sdaaaai',
age:23,
sex:'男'
}];
2. var num_arr = [1,2,3];
//通过tostring()将数组转成字符串,默认,分割
var str = num_arr.toString();
console.log(str);
//通过join()将数组通过某个字符拼接转化成字符串
var str2 = num_arr.join('|');//1|2|3 即|分割
console.log(str2);
//可以 split反序列化
var new_arr = str.split(',');//字符串方法
console.log(new_arr);
6.数组方法
栈和队列方法
栈和队列方法 会改变原数组
var arr = [1,2,3];
arr.push在末尾追加元素
arr.push(4);// 1,2,3,4
arr.pop删除最末尾的那个元素
arr.pop();// 1,2,3
arr.unshift在第一项的前面放置元素
arr.unshift(0); // 0,1,2,3
arr.shift删除第一项元素
arr.shift(); // 1,2,3
console.log(arr);
排序方法
反序
arr.reverse(arr);
var num_arr = [1,33,11,113,223,13,23];
console.log(num_arr.sort());//排序 1, 11, 113, 13, 223, 23, 33
sort可以完成正常的排序(传入一个排序的函数)
console.log(num_arr.sort(function(v1,v2){
if(v1>v2)
return 1;
else if (v1<v2)
return -1;
else
return 0;
}));//1, 11, 13, 23, 33, 113, 223
//sort 算法 冒泡排序
for(var i=0;i<arr.length-1;i++){//确定轮数
for(var j=0;j<arr.length-i-1;j++){//确定每次比较的次数
if(arr[j]>arr[j+1]){
tem = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tem;
}
}
}
console.log(arr);
操作方法(数组截取拼接)
//arr.concat 返回拼接后的新数组
var arr1 = [1,2,3];
var arr2 = arr1.concat(4,5,6);
console.log(arr2);
//arr.slice 不会改变原数组,返回截取后的新数组
var arr3 = arr2.slice(0,3);
console.log(arr3);// 1,2,3
// splice会改变原数组,可以替换,可以增加,可以删除
var res = arr2.splice(0,3,8,8,8);
console.log(arr2); // 8 ,8,8,4,5,6
console.log(res); // 1,2,3
位置方法
//位置方法 比较适合去判断数组中是否有某个成员
var arr = [1,2,3,4,5,4,3,2,1];
console.log(arr.indexOf(1)); //0
console.log(arr.lastIndexOf(1)); //8
console.log(arr.indexOf(6)); //-1
// 如何将一个数组去重
var new_arr = [];
function qc(arr){
for(var k in arr){
if(new_arr.indexOf(arr[k]==-1)){
new_arr.push(arr[k]);
}
}
console.log(new_arr);
}
迭代方法
//数组的迭代方法
// every 全部成员都满足,才会返回true 判断学生是否都满足18岁
var ages = [19,20,21,18,17,19,20];
var res = ages.every(function(v,index,arr){
return v >= 18; // 返回布尔类型的值'
}
)
console.log(res);// -1
//some 只要有一个成员满足,就会返回TRUE,判断一组学生是否有满足18岁
var res = ages.some(function(v,index,arr){
return v >= 18; // 返回布尔类型的值
}
)
console.log(res);
//filter 过滤器,获取某一些符合条件的成员,在一组学生中获取满足18岁的成员
var res = ages.filter(function(v,index,arr){
return v>=18 ; //返回操作结束的结果
})
console.log(res);
//map 数组的遍历方法,有返回值,将所有年龄加一
var res = ages.map(function(v,index,arr){
return v+1 ; //返回操作结束的结果
})
console.log(res);
// foreach没有返回值
ages.map(function(v,index,arr){
console.log(v);
})