考虑到实际应用中多数为引用(复杂)类型数据,所以方法解析中部分包含引用(复杂)类型数据的测试效果
1、array.concat()
连接两个数组,返回值是连接后的新数组
当这个数组内部是引用(复杂)数据类型的时候,这个方法并不会在内存开辟新的区域。所以并不能实现深层次拷贝的效果
// 基础数据类型测试
let a = [1,2,3];
let b = a.concat([4,5]);
b[0] = 9;
console.log(a); // [1, 2, 3]
console.log(b); // [9,2,3,4,5]
// 引用(复杂)数据类型测试
let d = [{color:'red'},{color:'blue'}];
let e = d.concat([{color:'green'}]);
e[0].color = 'yellow';
console.log(d); // [{color:'yellow'},{color:'blue'}]
console.log(e); // [{color:'yellow'},{color:'blue'},{color:'green'}]
2、array.push()
在数组后面追加内容,返回值是追加内容后数组的长度
该方法改变原数组
let a = [10,20,30,40];
let b = a.push(50);
console.log(a); // [10,20,30,40,50]
console.log(b) // 5
console.log(b == a.length); // true
// 引用(复杂)数据类型测试
let c = [{id:1,color:'red'},{id:2,color:'green'}];
c.push({id:3,color:'blue'});
console.log(c); // [{id:1,color:'red'},{id:2,color:'green'},{id:3,color:'blue'}]
// 扩展 测试
let e = [1,2,3,4];
e.push([5,6],7,8);
console.log(e); // [1,2,3,4,[5,6],7,8];
let f = [{id:1,color:'red'},{id:2,color:'green'}];
f.push('blue','yellow',{id:3,color:'black'})
console.log(f); // [{id:1,color:'red'},{id:2,color:'green'},'blue','yellow',{id:3,color:'black'}]
// 单次push操作 不限 追加内容数据类型与长度
3、array.unshift()
在数组前面插入内容,返回值是插入内容后数组的长度
该方法改变原数组
// 基础数据类型测试
let a = [10,20,30,40];
let b = a.unshift(50);
console.log(a); // [50,10,20,30,40]
console.log(b) // 5
console.log(b == a.length); // true
// 引用(复杂)数据类型测试
let c = [{id:1,color:'red'},{id:2,color:'green'}];
c.unshift({id:3,color:'blue'});
console.log(c); // [{id:3,color:'blue'},{id:1,color:'red'},{id:2,color:'green'}]
// 扩展 测试
let e = [1,2,3,4];
e.unshift([5,6],7,8);
console.log(e); // [[5,6],7,8,1,2,3,4];
let f = [{id:1,color:'red'},{id:2,color:'green'}];
f.unshift('blue','yellow',{id:3,color:'black'})
console.log(f); // ['blue','yellow',{id:3,color:'black'},{id:1,color:'red'},{id:2,color:'green'}]
// 单次unshift操作 不限 插入内容数据类型与长度
4、array.splice(index,number,item...)
替换数组中的元素,返回值是被替换的元素集合
index:需要操作元素的索引值 (必填)
number:从索引值开始需要删除的长度 (必填)
item...:需要替换的元素内容,不填则执行删除操作(选填)
number 填 0 为插入操作、不传入 item.. 为删除操作
该方法改变原数组
// 替换操作
let a = [1,2,3,4,5,6,7];
console.log(a.splice( 2, 3, ...[30,40,50] )); // [3,4,5]
console.log(a); // [1, 2, 30, 40, 50, 6, 7]
// 插入操作
let b = [1,2,3,4,5,6,7];
console.log(b.splice(2,0, ...['A','B','C'])); // []
console.log(b); // [1, 2, 'A', 'B', 'C', 3, 4, 5, 6, 7]
// 删除操作
let c = [1,2,3,4,5,6,7];
console.log(c.splice( 2, 3 )); // [3,4,5]
console.log(c); // [1, 2, 6, 7]
5、array.slice(start,end)
切出数组中的元素,返回值是被切出的元素集合
start:要切出元素起始位置的索引值
end:要切出元素结束位置的索引值(选填 )
不传入 end 索引位置,则默认为从 start 索引位置之后的所有元素
不包含 end 索引位置元素
let a = [1,2,3,4,5,6,7];
console.log(a.slice( 2,4)); // [3, 4]
console.log(a); // [1, 2, 3, 4, 5, 6, 7]
let b = [1,2,3,4,5,6,7];
console.log(b.slice(2)); // [3, 4, 5, 6, 7]
console.log(b); // [1, 2, 3, 4, 5, 6, 7]
6、array.toString()
将简单数组转为字符串类型
值得注意的是它会拉平数组的所有层级,但是无法正确解析 对象 object
let a = [1,2,3,4,5,6,7];
console.log(a.toString()); // 1,2,3,4,5,6,7
let b = ['red','green','blue'];
console.log(b.toString()); // red,green,blue
let c = [1,[0.2,0.3],2,['A','B',['c','d']],true,[true,false]];
console.log(c.toString()); // 1,0.2,0.3,2,A,B,c,d,true,true,false
let d = [{id:1,color:'red'},1,2,3,'A','B','C'];
console.log(d.toString()); // [object Object],1,2,3,A,B,C
7、array.split(sep,limit)
将字符串转为数组,返回值为转化后的数组
sep:以传入的符号作为标记,来分隔数组单个元素的组成部分
limit:指定返回的数组的最大长度
let a = 'AB-CD';
// 传入对应符号
console.log(a.split('-')); // ['AB', 'CD']
// 传入空字符
console.log(a.split('')); // ['A', 'B', '-', 'C', 'D']
// 传入字符串中不存在的符号
console.log(a.split('/')); // ['AB-CD']
// 传入空字符 且 设置最大长度
console.log(a.split('',3)); // ['A', 'B', '-']
8、array.filter()
对数组进行过滤操作,返回满足表达式的元素集合
// 简单数组
let a = [1,2,3,4,5,6,7,8];
console.log(a.filter((value,index)=>{ return value > 5 })); // [6, 7, 8]
// 对象数组
let b = [{id:1,color:'red'},{id:1,color:'green'},{id:2,color:'blue'}];
console.log(b.filter((value,index)=>{ return value.id == 1 })); // [{id:1,color:'red'},{id:1,color:'green'}]
9、array.find()
查找当前数组,返回第一个满足表达式的元素
// 简单数组
let a = [1,2,3,4,5,6,7,8];
console.log(a.find((value,index)=>{ return value > 5 })); // 6
// 对象数组
let b = [{id:1,color:'red'},{id:2,color:'blue'},{id:2,color:'green'}];
console.log(b.find((value,index)=>{ return value.id == 2 })); // {id:2,color:'blue'}
10、array.findIndex()
查找当前数组,返回第一个满足表达式元素的索引值
// 简单数组
let a = [1,2,3,4,5,6,7,8];
console.log(a.findIndex((value,index)=>{ return value > 5 })); // 5
// 对象数组
let b = [{id:1,color:'red'},{id:2,color:'blue'},{id:2,color:'green'}];
console.log(b.findIndex((value,index)=>{ return value.id == 2 })); // 1
11、array.indexOf(value)
根据value检索当前数组或字符串内容,返回检索到第一次出现的索引值;不存在返回 -1
value:需要做检索的字符
该方法只能检索基础数据类型
// 字符串
let str = 'A B C D E F';
console.log(str.indexOf('E')); // 8
// 简单数组
let a = [1,2,3,4,5,6,7,8];
console.log(a.indexOf(5)); // 4
// 嵌套数组
let b = [1,2,3,4,[5,6],7,8];
console.log(b.indexOf(5)); // -1
12、array.includes(value)
根据value检索当前数组或字符串内容;存在返回true 不存在返回false
value:需要做检索的字符
该方法只能检索基础数据类型
// 字符串
let str = 'A B C D E F';
console.log(str.includes('E')); // true
// 简单数组
let a = [1,2,3,4,5,6,7,8];
console.log(a.includes(5)); // true
// 嵌套数组
let b = [1,2,3,4,[5,6],7,8];
console.log(b.includes(5)); // false
13、array.every()
遍历数组,判断数组元素内容是否满足表达式;全部满足返回 true
// 简单数组
let a = [1,2,3,4,5,6,7,8];
console.log( a.every((value,index) => {return value > 0 }) ); // true
console.log( a.every((value,index) => {return value > 2 }) ); // false
// 对象数组
let b = [{id:1,color:'red'},{id:2,color:'blue'},{id:2,color:'green'}];
console.log( b.every((value,index) => {return value.color != '' }) ); // true
console.log( b.every((value,index) => {return value.color == 'green' }) ); // false
14、array.some()
遍历数组,判断数组元素内容是否满足表达式;其中至少有一个满足返回 true
// 简单数组
let a = [1,2,3,4,5,6,7,8];
console.log( a.some((value,index) => {return value > 7 }) ); // true
console.log( a.some((value,index) => {return value > 10 }) ); // false
// 对象数组
let b = [{id:1,color:'red'},{id:2,color:'blue'},{id:2,color:'green'}];
console.log( b.some((value,index) => {return value.color == 'green' }) ); // true
console.log( b.some((value,index) => {return value.color == 'yellow' }) ); // false
15、array.sort()
将数组进行排序处理
let a = [50,10,20,6,7,8,90];
a.sort();
console.log(a); // [10, 20, 50, 6, 7, 8, 90]
let b = ['Z','Y','X','A','B','C'];
b.sort();
console.log(b); // [ A, B, C, X, Y, Z]
let c = [{id:3,value:'B'},{id:1,value:'D'},{id:2,value:'C'},{id:4,value:'A'}];
c.sort();
console.log(c); // [{id:3,value:'B'},{id:1,value:'D'},{id:2,value:'C'},{id:4,value:'A'}]
// 可以看到 对象数组 并不能完成直接排序处理 ,那试试加上表达式
let d = [{id:3,value:'B'},{id:1,value:'D'},{id:2,value:'C'},{id:4,value:'A'}];
d.sort((next,prev)=>{ return next.id - prev.id; });
console.log(d); // [{id:1,value:'D'},{id:2,value:'C'},{id:3,value:'B'},{id:4,value:'A'}]
d.sort((next,prev)=>{ return prev.id - next.id; });
console.log(d); // [{id:4,value:'A'},{id:3,value:'B'},{id:2,value:'C'},{id:1,value:'D'}]