entries() 方法返回一個新的Array Iterator對象,該對象包含數組中每一個索引的鍵/值對。數組
Object.entries()
傳入對象函數
const obj = { foo: 'bar', baz: 42 }; Object.entries(obj) //輸出 [ ["foo", "bar"], ["baz", 42] ]
Array.entries()
傳入數組code
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 }]]
將 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'}
返回一個新的 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"]
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 */
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"]的數組,是返回的迭代器中的元素值。
iterator.next方法運行it
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' ] ]
二維數組按行排序io
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);
使用for…of 循環console
var arr = ["a", "b", "c"]; var iterator = arr.entries(); // undefined for (let e of iterator) { console.log(e); } // [0, "a"] // [1, "b"] // [2, "c"]