ES5中循环数组:
1.for
2.while
3.arr.forEach() 代替for,用起来更方便
arr.forEach(
function(val,index,arr){
console.log(val,index,arr);
}
)
4.arr.map() 映射,非常有用
做数据交互,正常情况下,需要配合return,返回一个新数组,若没有return,相当于forEach,平时只要用map(),一定需要return,否则,直接用forEach()就行了。
在数据交互时,可以使用map()整理后台传来的数据:
let arr=[{title:'aaaa',red:100,hot:true},
{title:'bbb',red:200,hot:false},
{title:'ccc',red:300,hot:true},
{title:'ddd',red:400,hot:false}];
let newarr=arr.map((item,index,arr)=>{
let json={}
json.t=`@@${item.title}-----`;
json.r=`item.read+333`;
json.hot=item.hot==true&&'真棒!!'
return json;
})
console.log(newarr);//输出
img15.arr.filter() 筛选,返回新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
var ages = [32, 33, 16, 40];
function checkAdult(age) {
return age >= 18;
}
console.log( ages.filter(checkAdult));//[32, 33, 40]
6.arr.some() 查找,数组里面有一个元素符合条件,就返回true.
7.arr.every() 查找,数组里面有所有元素符合条件,才返回true.
var ages = [31, 33, 35, 37];
function checkAdult(age) {
return age%2==1;
}
console.log(ages.every(checkAdult));//true
map()、filter()、some()、every()的用法和forEach相同,只不过功能不同。它们都可以接受两个参数:arr.forEach/map...(循环回掉函数,this的指向)
如果循环回掉函数是个箭头函数,则第二个参数无效,因为箭头函数中的this,永远指向函数所在的对象。
8.arr.reduce(); 求数组的和、阶乘,从左往右计算
9.arr.reduceRight();求数组的和、阶乘,从右往左计算
ES6中数组操作:
1、for.....of.... 循环数组,搭配keys(),entries(),可以循环数组项的不同内容
let arr=['aaa','bbbb','cccc','ddd'];
for(let val of arr){
console.log(val);//aaa bbbb cccc ddd 循环出每一项的值
}
for(let index of arr.keys()){
console.log(index);//0 1 2 3 循环出每一项的下标
}
for(let item of arr.entries()){
console.log(item);//[0, "aaa"] [1, "bbbb"] [2, "cccc"] [3, "ddd"] 循环出每一项的下标与值,以数组的形式返回
}
for(let [key,item] of arr.entries()){
console.log(key,item);//0 "aaa" 1 "bbbb" 2 "cccc" 3 "ddd" 循环出每一项的下标与值
}
2、"..."运算符
(1)、扩展运算符可以把数组展开,如:
var arr=['123','abc','456'];
console.log(...arr);//123 abc 456
(2)、把一组数据整合成数组,作用类似于arguments,但比arguments更方便,如:
function a(...num){
console.log(num);// [1, 2, 3, 4, 5]
}
a(1,2,3,4,5);
(3)、处理剩余参数,如:
function a(b,c,...d){
console.log(b,c,d);//输出1 2 [3, 4, 5, 6, 7],意思是把1 ,2 赋值给 b,c,剩余的赋值给d
}
a(1,2,3,4,5,6,7);
(4)、复制数组,注意,不是复制指向数组的指针:
let arr=[1,2,3,4];
let arr2=arr;//这里是把指向arr的指针,赋值给了arr2
arr2.push(5);
console.log(arr);//[1, 2, 3, 4, 5] arr被改变
console.log(arr2);//[1, 2, 3, 4, 5]
let arr=[1,2,3,4];
let arr2=[...arr];//这里先把arr打散,再重新组成新数组
arr2.push(5);
console.log(arr);//[1, 2, 3, 4] arr没有改变
console.log(arr2);//[1, 2, 3, 4, 5]
Array.from()
3、from() 可以将类数组对象(获取的一组元素、argument、、、可以理解为有length属性的东西)转成数组。
var str='yangyi';
console.log(Array.from(str));//["y", "a", "n", "g", "y", "i"]
function zhuan(){
let arr=Array.from(arguments);
arr.push(666);
console.log(arr);// [1, 2, 3, 4, 5, 666]
}
zhuan(1,2,3,4,5);
let json={0:'yang',1:'yi',2:'hao',3:'ren'}
console.log(Array.from(json));// [ ] 输出空数组
let json={0:'yang',1:'yi',2:'hao',3:'ren',length:2}//添加length属性
console.log(Array.from(json));// ["yang", "yi"]
4、Array.of() 把一组值转成数组,有些类似于“...”运算符
let arr=Array.of("yang","yi","hao","ren");
console.log(arr);//["yang", "yi", "hao", "ren"]
5、Array.findindex()
查找符合条件的数组元素的位置,如果没找到,返回-1
6、Array.fill()
用于填充数组,Array.fill(填充的东西,开始位置,结束位置)
7、Array.includes()
查找数组中有没有某个数组元素,有的话返回true,否则返回false。功能与Array.indexOf()相似,只不过后者返回0或-1。
let arr=["yang", "yi", "hao", "ren"];
console.log(arr.includes("yang1"));//false
console.log(arr.indexOf("yang"));//0
字符串中也有str.includes()、str.indexOf(),用法相同。
8、Array.find()
查找第一个符合条件的数组成员,如果没找到,返回undefined
网友评论