1.什么是entry

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

2.示例

  1. Object.entries()
    传入对象

    const obj = { foo: 'bar', baz: 42 };Object.entries(obj)//输出 [ ["foo", "bar"], ["baz", 42] ]
  2. Array.entries()
    传入数组

    const arr = ['a', 'b', 'c']; console.log(Object.entries(arr));  // [[ '0', 'a' ], [ '1', 'b' ], [ '2', 'c' ] ]const arr1 = [{ a: 1 }, 2, 3]; console.log(Object.entries(arr1));  // [['0', { a: 1 }], ['1', '2'], ['2', '3']]const arr2 = [{ a: 1 }, { b: 2 }, { c: 3 }]; console.log(Object.entries(arr2));  // [['0', { a: 1 }], ['1', { b: 2 }], ['2', { c: 3 }]]
  3. 将 Object 转化为 Map
    new Map() 构造函数接受一个可迭代的 entries 。 借助 Object.entries 方法你可以很容易的将 Object 转换为 Map:

    const obj2 = { foo: 'bar', baz: 'abc' }; console.log(Object.entries(obj2));  // [['foo', 'bar'], ['baz', 'abc']]const map = new Map(Object.entries(obj2)); console.log(map); // Map {'foo' => 'bar', 'baz' => 'abc'}

3. arr.entries()

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

    var array1 = ['a', 'b', 'c'];var iterator1 = array1.entries();console.log(iterator1.next().value);// expected output: Array [0, "a"]console.log(iterator1.next().value);// expected output: Array [1, "b"]
  2. 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*/
  3. iterator.next()

    var arr = ['a', 'b', 'c'];var iterator = arr.entries();console.log(iterator.next());// { value: [ 0, 'a' ], done: false }// iterator.next()返回一个对象,对于有元素的数组,// 是next{ value: Array(2), done: false };// next.done 用于指示迭代器是否完成:在每次迭代时进行更新而且都是false,// 直到迭代器结束done才是true。// next.value是一个["key","value"]的数组,是返回的迭代器中的元素值。
  4. 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);// false// [ 0, 'a' ]// false// [ 1, 'b' ]// false// [ 2, 'c' ]// true// [ [ 0, 'a' ], [ 1, 'b' ], [ 2, 'c' ] ]
  5. 二维数组按行排序

    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);
  6. 使用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"]