Array.prototype.values()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2018å¹´5æ.
values() 㯠Array ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ãé
åã®åè¦ç´ ã®å¤ãå«ãæ°ããé
åã¤ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ããè¿ãã¾ãã
試ãã¦ã¿ã¾ããã
const array = ["a", "b", "c"];
const iterator = array.values();
for (const value of iterator) {
console.log(value);
}
// äºæ³ãããçµæ: "a"
// äºæ³ãããçµæ: "b"
// äºæ³ãããçµæ: "c"
æ§æ
values()
弿°
ãªãã
è¿å¤
æ°ããå復å¯è½ãªã¤ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ãã§ãã
解説
Array.prototype.values() 㯠Array.prototype[Symbol.iterator]() ã®æ¢å®ã®å®è£
ã§ãã
Array.prototype.values === Array.prototype[Symbol.iterator]; // true
çé
åã«ä½¿ç¨ãããå ´åã values() ã¡ã½ããã¯ç©ºã®ã¹ãããã undefined ã®å¤ã§ãããã®ããã«å復å¦çãã¾ãã
values() ã¡ã½ããã¯æ±ç¨çã§ãããã®ã¡ã½ãã㯠this å¤ã« length ããããã£ã¨æ´æ°ãã¼ã®ããããã£ããããã¨ã ããæå¾
ãã¾ãã
ä¾
>for...of ã«ã¼ããç¨ããå復å¦ç
values() ã¯å復å¯è½ãªã¤ãã¬ã¼ã¿ã¼ãè¿ãããã for...of ã«ã¼ãã使ç¨ãã¦å復å¦çãè¡ããã¨ãã§ãã¾ãã
const arr = ["a", "b", "c", "d", "e"];
const iterator = arr.values();
for (const letter of iterator) {
console.log(letter);
} // "a" "b" "c" "d" "e"
next() ã使ç¨ããå復å¦ç
è¿å¤ã¯ã¤ãã¬ã¼ã¿ã¼ã§ããããããç´æ¥ next() ã¡ã½ãããå¼ã³åºããã¨ãã§ãã¾ãã
const arr = ["a", "b", "c", "d", "e"];
const iterator = arr.values();
iterator.next(); // { value: "a", done: false }
iterator.next(); // { value: "b", done: false }
iterator.next(); // { value: "c", done: false }
iterator.next(); // { value: "d", done: false }
iterator.next(); // { value: "e", done: false }
iterator.next(); // { value: undefined, done: true }
console.log(iterator.next().value); // undefined
å復å¯è½ãªãã¸ã§ã¯ãã®åå©ç¨
è¦å: é åã¤ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ãã¯ãä¸åã®ã¿ä½¿ç¨å¯è½ãªãªãã¸ã§ã¯ãã«ãªãã¾ããåå©ç¨ããªãã§ãã ããã
values() ã§è¿ãããå復å¯è½ãªãã¸ã§ã¯ãã¯åå©ç¨ã§ãã¾ããã next().done = true ã¾ã㯠currentIndex > length ã«ãªã£ãå ´åã for...of ã«ã¼ãã¯çµäºãããã以éã®å復å¦çã¯å¹æãããã¾ããã
const arr = ["a", "b", "c", "d", "e"];
const values = arr.values();
for (const letter of values) {
console.log(letter);
}
// "a" "b" "c" "d" "e"
for (const letter of values) {
console.log(letter);
}
// undefined
break æã使ç¨ãã¦æ©ãã«å復å¦çãçµäºããå ´åãå復å¦çãç¶ç¶ããéã«ã¤ãã¬ã¼ã¿ã¼ã§ç¾å¨ã®ä½ç½®ããåéãããã¨ãã§ãã¾ãã
const arr = ["a", "b", "c", "d", "e"];
const values = arr.values();
for (const letter of values) {
console.log(letter);
if (letter === "b") {
break;
}
}
// "a" "b"
for (const letter of values) {
console.log(letter);
}
// "c" "d" "e"
å復å¦çä¸ã®æ¸ãæ¿ã
values() ããè¿ãããé
åã®ã¤ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ãã«ã¯å¤ãæ ¼ç´ããã¦ãã¾ããããã®ä»£ãããçææã«ä½¿ç¨ããé
åã®ã¢ãã¬ã¹ãæ ¼ç´ããåå復æã«ç¾å¨ã¢ã¯ã»ã¹ãã¦ããä½ç½®ãèªã¿åãã¾ãããã®ãããã¤ãã¬ã¼ã¿ã¼ã®åºåã¯ããã®ã¹ãããã®å®è¡æã«ãã®ä½ç½®ã«æ ¼ç´ããã¦ããå¤ã«ä¾åãã¾ããé
åã®å¤ãå¤åããå ´åã¯ãé
åã¤ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ãã®å¤ãå¤åãã¾ãã
const arr = ["a", "b", "c", "d", "e"];
const iterator = arr.values();
console.log(iterator); // Array Iterator { }
console.log(iterator.next().value); // "a"
arr[1] = "n";
console.log(iterator.next().value); // "n"
å復å¦çã¡ã½ããã¨ã¯ç°ãªããé åã¤ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ãã¯ä½ææã«é åã®é·ããä¿åãããå復å¦çã®ãã³ã«ä¸åº¦ã ãèªã¿è¾¼ã¿ã¾ãããã®ãããå復å¦çä¸ã«é åã大ãããªã£ãå ´åãã¤ãã¬ã¼ã¿ã¼ã¯æ°ããè¦ç´ ãå¦çãã¾ããããã«ãããç¡éã«ã¼ããçºçããå¯è½æ§ãããã¾ãã
const arr = [1, 2, 3];
for (const e of arr) {
arr.push(e * 10);
}
// RangeError: invalid array length
çé åã®å復å¦ç
values() ã¯ç©ºã®ã¹ãããã undefined ã§ãããã®ããã«å¦çãã¾ãã
for (const element of [, "a"].values()) {
console.log(element);
}
// undefined
// 'a'
é å以å¤ã®ãªãã¸ã§ã¯ãã«å¯¾ãã values() ã®å¼ã³åºã
values() ã¡ã½ãã㯠this ã® length ããããã£ãèªã¿è¾¼ã¿ããã®ãã¼ã length ããå°ããéè² ã®æ´æ°ã§ããåããããã£ã«ã¢ã¯ã»ã¹ãã¾ãã
const arrayLike = {
length: 3,
0: "a",
1: "b",
2: "c",
3: "d", // length ã 3 ã§ãããã values() ããã¯ç¡è¦ããã
};
for (const entry of Array.prototype.values.call(arrayLike)) {
console.log(entry);
}
// a
// b
// c
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype.values> |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
Array.prototype.valuesã®ããªãã£ã« (core-js)- es-shims ã«ãã
Array.prototype.valuesã®ããªãã£ã« - ã¤ã³ããã¯ã¹ä»ãã³ã¬ã¯ã·ã§ã³ã®ã¬ã¤ã
ArrayArray.prototype.entries()Array.prototype.keys()Array.prototype[Symbol.iterator]()TypedArray.prototype.values()- å復å¦çãããã³ã«