• Array > Array.prototype.entries()


    方法概述

    entries() 方法返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。
    

    示例

    const array1 = ['a', 'b', 'c'];
    
    const iterator1 = array1.entries();
    
    console.log(iterator1.next().value);
    // expected output: Array [0, "a"]
    
    console.log(iterator1.next().value);
    // expected output: Array [1, "b"]
    

    语法

    arr.entries()

    返回值

    一个新的 Array 迭代器对象。Array Iterator是对象,它的原型(proto:Array Iterator)上有一个next方法,可用用于遍历迭代器取得原数组的[key,value]。

    应用示例

    1. Array Iterator
    var arr = ["a", "b", "c"];
    var iterator = arr.entries();
    console.log(iterator);
    
    /*Array Iterator {}
             __proto__:Array Iterator
             next:ƒ next()
             Symbol(Symbol.toStringTag):"Array Iterator"
             __proto__:Object
    */
    
    1. iterator.next()
    var arr = ["a", "b", "c"];
    var iterator = arr.entries();
    console.log(iterator.next());
    
    /*{value: Array(2), done: false}
              done:false
              value:(2) [0, "a"]
               __proto__: Object
    */
    // iterator.next()返回一个对象,对于有元素的数组,
    // 是next{ value: Array(2), done: false };
    // next.done 用于指示迭代器是否完成:在每次迭代时进行更新而且都是false,
    // 直到迭代器结束done才是true。
    // next.value是一个["key","value"]的数组,是返回的迭代器中的元素值。
    
    
    1. iterator.next方法运行
    var arr = ["a", "b", "c"];
    var iter = arr.entries();
    var a = [];
    
    // for(var i=0; i< arr.length; i++){   // 实际使用的是这个
    for(var i=0; i< arr.length+1; i++){    // 注意,是length+1,比数组的长度大
        var tem = iter.next();             // 每次迭代时更新next
        console.log(tem.done);             // 这里可以看到更新后的done都是false
        if(tem.done !== true){             // 遍历迭代器结束done才是true
            console.log(tem.value);
            a[i]=tem.value;
        }
    }
    
    console.log(a);                         // 遍历完毕,输出next.value的数组
    
    1. 二维数组按行排序
    function sortArr(arr) {
        var goNext = true;
        var entries = arr.entries();
        while (goNext) {
            var result = entries.next();
            if (result.done !== true) {
                result.value[1].sort((a, b) => a - b);
                goNext = true;
            } else {
                goNext = false;
            }
        }
        return arr;
    }
    
    var arr = [[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]];
    sortArr(arr);
    
    /*(4) [Array(2), Array(5), Array(5), Array(4)]
        0:(2) [1, 34]
        1:(5) [2, 3, 44, 234, 456]
        2:(5) [1, 4, 5, 6, 4567]
        3:(4) [1, 23, 34, 78]
        length:4
        __proto__:Array(0)
    */
    
    
    1. 使用for…of 循环
    var arr = ["a", "b", "c"];
    var iterator = arr.entries();
    // undefined
    
    for (let e of iterator) {
        console.log(e);
    }
    
    // [0, "a"]
    // [1, "b"]
    // [2, "c"]
    
    

    参考:MDN-Array.prototype.entries()

    一些其他的应用:
    leetcode-1405. 最长快乐字符串

  • 相关阅读:
    link和@import的区别
    行内元素、块状元素和行内块元素
    content-box与border-box区别
    实现浏览器内多个标签页之间的通信
    cookie、 sessionStorage 、localStorage之间的区别和使用
    让浏览器识别HTML5规范中的新标签
    HTML5新增及移除的元素
    摇一摇
    WebViewJavascriptBridge
    使用TFHpple解析html
  • 原文地址:https://www.cnblogs.com/ilaozhao/p/15874293.html
Copyright © 2020-2023  润新知