美文网首页
ES6与ES5——数组

ES6与ES5——数组

作者: 向上而活 | 来源:发表于2018-06-20 10:44 被阅读0次

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);//输出

img1

5.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

相关文章

网友评论

      本文标题:ES6与ES5——数组

      本文链接:https://www.haomeiwen.com/subject/tjqzeftx.html