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}