Array.prototype.entries()

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

语法

语法:

arr.entries();

类型声明:

interface IterableIterator<T> extends Iterator<T> {
  [Symbol.iterator](): IterableIterator<T>;
}

interface Array<T> {
  entries(): IterableIterator<[number, T]>;
}

返回值:

返回一个新的 Array 迭代器对象。Array Iterator 是对象,它的原型上有一个 next() 方法,可用于便利迭代器取得原数组的键值对。详情请查询 Iterator 对象

代码示例

基本用法

const arr = ['a', 'b', 'c'];

const iterator = arr.entries();
const result = [];

// 注意是 length + 1,比数组的长度大
for (let i = 0; i < arr.length + 1; i++) {
  // 每次迭代更新 next
  const item = iterator.next();
  // 这里可以看到更新后的 done 都是 false
  console.log(item.done);
  // 遍历迭代器结束 done 才是 true
  if (item.done !== true) {
    console.log(item.value);
    result[i] = item.value;
  }
}

console.log(result);
// Output: ['a', 'b', 'c']

二维数组排序

function sortArr(arr) {
  let goNext = true;
  let entries = arr.entries();
  while (goNext) {
    let result = entries.next();
    if (result.done !== true) {
      result.value[1].sort((a, b) => a - b);
      goNext = true;
    } else {
      goNext = false;
    }
  }
  return arr;
}

const 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)
*/

使用 for-of 循环

const arr = ['a', 'b', 'c'];
const iterator = arr.entries();

for (let item of iterator) {
  console.log(item);
}
// [0, 'a']
// [1, 'b']
// [2, 'c']

参考资料