配列のキーや要素を含むイテラブルなオブジェクトを返す - keys, values, entries

《 初回公開:2023/10/19 , 最終更新:未 》

keys, values, entriesの各メソッドは配列のキー(インデックス値)や要素を含む、イテレータでありかつイテラブルなオブジェクトを返す。
これらのメソッドは空のスロットをスキップしない。

【 目次 】

entries

配列の各要素に対してキーと値のペアを返す。
イテレータのnextメソッドから返される値はlength=2の配列[index,value]として返される。

イテレータとして利用

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

let result = iterator.next();
while (!result.done) {
    console.log(result.value);  // [0, 'a'] [1, 'b'] [2, 'c']
    result = iterator.next();
}

entriesメソッドから返される値はイテラブルでもあるのでfor...of 文を使って値を取り出す事もできる。

イテラブルとして利用

const array = ['a', 'b', 'c'];
const iterable = array.entries();

for (const [index, value] of iterable) {
    console.log(`index = ${index}, value = ${value}`);
}
// index = 0, value = a
// index = 1, value = b
// index = 2, value = c

keys

配列の各要素に対してインデックスのキーを返す。
イテラブルとして使用すると。

const array = ['a', 'b', 'c'];
const iterable = array.keys();

for (const index of iterable) {
    console.log(index); // 0 1 2
}

values

配列の各要素に対して要素の値を返す。
イテラブルとして使用すると。

const array = ['a', 'b', 'c'];
const iterable = array.values();

for (const value of iterable) {
    console.log(value); // a b c
}

Objectクラスのkeys, values, entriesメソッドとの違い

似たようなメソッドにObjectクラスのkeys, values, entriesメソッドがある

Objectクラスのkeys, values, entriesメソッドはクラスメソッドであるのに対して、Arrayクラスのkeys, values, entriesメソッドはインスタンスメソッドとして実装されている。
またObjectクラスのkeys, values, entriesメソッドが配列を返すのに対して、Arrayクラスのkeys, values, entriesメソッドが返すオブジェクトは配列では無い。

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

// array.entriesは配列ではない
console.log(Array.isArray(array.entries())) // false
// Object.entriesは配列を返す
console.log(Array.isArray(Object.entries(array)))   // true

不連続な配列に対してArrayクラスのkeys, values, entriesメソッドは空のスロットをスキップしない。
Objectクラスのkeys, values, entriesメソッドは空のスロットをスキップする。

const array = ['a', , 'c'];

for (const [index, value] of array.entries()) {
    console.log(`index = ${index}, value = ${value}`);
}
// index = 0, value = a
// index = 1, value = undefined
// index = 2, value = c

for (const [index, value] of Object.entries(array)) {
    console.log(`index = ${index}, value = ${value}`);
}
// index = 0, value = a
// index = 2, value = c
ページのトップへ戻る