JavaScript Guidebook

JavaScript 完全知识体系

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']

参考资料