ES6中关于数组 的新增特性

本文探讨了ES6中数组的新增特性,包括基础部分的数组循环遍历和回调的使用,详细阐述了如何在ES6环境下更高效地操作数组。
摘要由CSDN通过智能技术生成

ES6中关于数组 的新增特性

基础部分:

<script>
    // slice 截取(可以实现复制)
    /*
    let names = [1, 2, 3, 4, 5, 6];
    // let names2 = names.slice();     // Copy
    let names2 = names.slice(1, 3);
    console.log(names2);               // [ 2, 3 ]
    */

    // concat 拼接
    /*
    let names = [1, 2, 3, 4, 5, 6];
    let names2 = [7, 8];

    // names = names.concat(names2);

    names = [...names, ...names2];

    console.log(names);
    */

    // fill 填充
    /*
    let names = new Array(10);

    // names.fill(0);
    // names.fill(0, 0, 3);     // 填充索引0,1,2这三个元素的值为0
    names.fill(0, 2, 5);        // 填充索引2,3,4这三个元素的值为0

    console.log(names);
    */

    // splice 剔除
    /*
    let names = [1, 2, 3, 4, 5, 6];

    // 占位(数组长度不变)
    // delete names[2];

    // 剔除(数组长度减少)
    names.splice(2, 1);

    console.log(names);
    */

    /*
    // indexOf  返回含有元素的索引
    let names = [1, 2, 3, 4, 5, 6, NaN];
    // console.log(names.indexOf(3));  // 2
    // console.log(names.indexOf(30));  // -1
    console.log(names.indexOf(NaN));    // -1(无法判断NaN)

    // includes 如果包含就返回true,否则为false
    // console.log(names.includes(30));
    console.log(names.includes(NaN));       // true
    */

    // 下面三个方法,是Array, Set, Map这三种数据结构都有的!
    // 返回Iterator遍历器对象!
    // 这个Inerator只有一个方法——next(),返回下一个元素!
    // keys
    // values
    // entries

    let names = [11, 22, 33];
    // console.log(names.keys());
    // 返回 索引 集
    // let it = names.keys();
    /*
    console.log(it.next());
    console.log(it.next());
    console.log(it.next());
    console.log(it.next());
    */
    /*
    let item = it.next();
    while (!item.done) {
        console.log(item.value);
        item = it.next();
    }
    */

    // console.log(names.values());
    // 返回 值 集
    // let it = names.values();
    /*
    console.log(it.next());
    console.log(it.next());
    console.log(it.next());
    console.log(it.next());
    */
    /*
    let item = it.next();
    while (!item.done) {
        console.log(item.value);
        item = it.next();
    }
    */

    // 返回 索引-值(键值数组)集
    let it = names.entries();
    // console.log(it);
    /*
    console.log(it.next());
    console.log(it.next());
    console.log(it.next());
    console.log(it.next());
    */
    /*
    let { value: [index, value], done } = it.next();
    console.log(index, value);
    console.log(done);
    */
    
    /*
    try {
        var { value: [index, value], done } = it.next();
        while (!done) {
            console.log(index, value);
            var { value: [index, value], done } = it.next();
        }
    } catch(e) { }
    */
    
</script>

数组的循环遍历:

<script>
    let names = [11, 22, 33, 44];

    // 要循环一个数组,可以采用如下几种方式:
    // 1、keys

    // 2、values

    // 3、entries

    // 4、索引循环(计数器循环)
    // for (let i = 0, len = names.length; i < len; i++)
    //     console.log(i, names[i]);

    // 5、for-in(索引是***字符串***)
    for (let i in names) {
        console.log(typeof i, i, names[i]);
        if (i == 2)
            break;
    }

    // 6、for-of(值循环)
    // for (let v of names) {
    //     console.log(v);
    //     if (v == 22)
    //         break;
    // }

    // 7、forEach(数组的回调方法,不能被break)
    // names.forEach(function(v, i) {
    //     console.log(i, v);
    //     if (i == 2)
    //         break;              // ERROR
    // });
</script>

回调:

<script>
    // 数组中新增的回调

    // forEach
    // sort


    // map 将数组中的每一个元素进行逐一处理,然后返回处理后的结果数组(如果是对象数组还是原元素的引用关系,如果是值数组,处理完后返回新的数组)
    /*
    let scores = [50, 60, 77, 30];
    let scores2 = scores.map(function(item, index) {
        return Number.parseFloat((Math.sqrt(item) * 10).toFixed(1));
    });

    console.dir(scores2);
    console.dir(scores);
    */

    let students = [
        { id: 1, name: "Tom", score: 60},
        { id: 2, name: "Sam", score: 60},
        { id: 3, name: "Ben", score: 77},
        { id: 4, name: "Frank", score: 69}
    ];
    /*

    let students2 = students.map(function(student) {
        student.score = Number.parseFloat((Math.sqrt(student.score) * 10).toFixed(1));
        return student;
    });

    console.dir(students2);
    console.dir(students);
    */

    // find 返回查找匹配的第一个元素即可(找不到返回undefined)
    /*
    let student = students.find(function(student) {
        console.log("pp");
        return student.score == 100;
        // return student.score >= 60;
    });

    console.log(student);
    */

    // findIndex 返回查找匹配的第一个元素索引即可(找不到返回-1)
    /*
    let index = students.findIndex(function(student) {
        console.log("pp");
        // return student.score == 100;
        return student.score >= 60;
    });

    console.log(index);
    */

    // filter 过滤出数组中满足条件的所有元素,以结果数组返回(如果是对象数组还是原元素的引用关系,如果是值数组,处理完后返回新的数组)
    // let scores = [50, 60, 77, 30];
    // let scores2 = scores.filter(function(item, index) {
    //     return item >= 60;
    // });
    // console.dir(scores2);
    // console.dir(scores);

    /*
    let students2 = students.filter(function(student) {
        return student.score >= 60;
    });

    console.log(students2);
    console.log(students);

    console.log(students2[0] === students[1]);
    */

    // every 如果数组中的每个元素都满足条件,那么才返回真,只要有一个元素不满足条件就返回假
    /*
    let flag = students.every(function(student) {
        console.log("pp");
        return student.score >= 60;
    });

    console.log(flag);
    */

    // some 只要数组中有一个元素满足条件,就返回真(只有都不满足,才返回假)
    let flag = students.some(function(student) {
        console.log("pp");
        return student.score < 60;
    });

    console.log(flag);
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值