Skip to main content

entries()

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

Try it

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]

Example

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 的数组

二维数组按行排序

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

使用 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"]

fromEntries

format url

const str = "age=zhoujielun&&name=16";
const ar = new URLSearchParams(str);
console.log(Object.fromEntries(ar));
//{age: "zhoujielun", name: "16"}

将对象中的属性数值统一*n

const obj1 = { a: 1, b: 2, c: 3, d: "isD" };
const obj2 = Object.fromEntries(
Object.entries(obj1).map(([key, val]) => {
if (typeof val === "number") return [key, val * 2];
else return [key, val];
})
);
console.log(obj2);
//{a: 2, b: 4, c: 6, d: "isD"}

转化 array

const arr = [
["0", "a"],
["1", "b"],
["2", "c"],
];
console.log(Object.fromEntries(arr));
// {0: "a", 1: "b", 2: "c"}

转化 map

const map = new Map([
["name", "周杰伦"],
["age", 36],
]);

console.log(Object.fromEntries(map));
// {name: "周杰伦", age: 36}

参考