Arrayにはいくつか有用なメソッドがあるのでメモしておく。

isArray

Array.isArray([1, 2, 3]);  // true
Array.isArray({foo: 123}); // false
Array.isArray('foobar');   // false

indexOf

var a = ['a', 'b', 'c'];
a.indexOf('b'); // 1
a.indexOf('z'); // -1

includes

これは ES2016 で追加された。

var a = ['a', 'b', 'c'];
a.includes('b'); // true
a.includes('z'); // false

length

var a = ['a', 'b', 'c'];
a.length; // 3

toString

var a = ['a', 'b', 'c'];
a.toString(); // 'a,b,c'

concat

var a = ['a', 'b', 'c'];
a.concat(['d', 'e', 'f']); // ['a', 'b', 'c', 'd', 'e', 'f']

スプレッド構文

ES2015 で追加されたスプレッド構文を使うと、concat と同じことができる。

var a = ['a', 'b', 'c'];
[...a, 'd', 'e', 'f']; // ['a', 'b', 'c', 'd', 'e', 'f']
var b = ['d', 'e', 'f'];
[...a, ...b]; // ['a', 'b', 'c', 'd', 'e', 'f']

join

var a = ['a', 'b', 'c'];
a.join();    // 'a,b,c'
a.join('');  // 'abc'
a.join('-'); // 'a-b-c'

sort

var a = [1, 4, 3, 2, 5];
a.sort(); // [1, 2, 3, 4, 5]

比較順序を指定することもできる。

var a = [1, 4, 3, 2, 5];
a.sort(function (a, b) {
  return a - b;
}); // [1, 2, 3, 4, 5]

また、下の配列に影響を与えずにソートしたい場合は、slice でコピーを作ってからソートする。 (スプレッド構文、 concat でも同じことができる)

var a = [1, 4, 3, 2, 5];
var b = a.slice().sort(function (a, b) {
  return a - b;
}); // [1, 2, 3, 4, 5]

reverse

var a = [1, 2, 3, 4, 5];
a.reverse(); // [5, 4, 3, 2, 1]

こちらも sort と同様にして、 元の配列に影響を与えずにソートすることができる。

配列要素の操作

    引数
pop 末尾の要素を取り除く (なし)
push 末尾に要素を追加 追加する要素
shift 先頭の要素を取り除く (なし)
unshift 先頭に要素を追加 追加する要素
splice 指定した位置の要素を取り除く 対象要素のindex, 要素数(, 先頭に追加する要素)

flat

配列のネストを解除する。 ES2019 で追加された。

var a = [1, 2, [3, 4, [5, 6]]];
a.flat(); // [1, 2, 3, 4, [5, 6]]
a.flat(2); // [1, 2, 3, 4, 5, 6]

分割代入

ES2015.

var a, b, rest;
[a, b] = [10, 20];
console.log(a); // 10
console.log(b); // 20
var [a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(a); // 10
console.log(b); // 20
console.log(rest); // [30, 40, 50]

高階関数

forEach

var a = [1, 2, 3];
a.forEach(function (v, i, a) {
  console.log(v, i, a);
});

map

var a = [1, 2, 3];
a.map(function (v, i, a) {
  return v * 2;
}); // [2, 4, 6]

filter

var a = [1, 2, 3];
a.filter(function (v, i, a) {
  return v % 2 === 0;
}); // [2]

reduce

var a = [1, 2, 3];
a.reduce(function (p, c, i, a) {
  return p + c;
}); // 6

find

ES2015。 true を返す最初の要素を返す。 true が返るまで全ての要素を評価する。 すべて false の場合は undefined を返す。

var a = [1, 2, 3];
a.find(function (v, i, a) {
  return v % 2 === 0;
}); // 2

findIndex

ES2015。 true を返す最初の要素の index を返す。 true が返るまで全ての要素を評価する。 すべて false の場合は -1 を返す。

var a = [1, 2, 3];
a.findIndex(function (v, i, a) {
  return v % 2 === 0;
}); // 1

some

ES2015。 true を返す要素があれば true を返す。 true が返るまで全ての要素を評価する。 すべて false の場合は false を返す。

var a = [1, 2, 3];
a.some(function (v, i, a) {
  return v % 2 === 0;
}); // true

every

ES2015。 すべての要素が true を返す場合に true を返す。 false が返るまで全ての要素を評価する。

var a = [1, 2, 3];
a.every(function (v, i, a) {
  return v % 2 === 0;
}); // false