Array のメソッド

改めて確認したら、IE11以上なら underscore.js を使わずともけっこういけますね。以下、IE11対応で使いそうなメソッドをピックアップしました。

Array.isArray()

配列か否か。
Array.isArray(【確認対象】);

Array.concat()

配列に他の配列や値をつないでできた新しい配列を返す。

var concated_ary =【1つめの配列】.concat(【2つめの配列もしくは値】);

【2つめの配列もしくは値】は、複数の配列や複数の値、または複数の配列と値の混在も受け取れる。

concated_aryはシャローコピー(一次元のコピー)

Array.every()

与えられた関数によって実行されるテストに、配列のすべての要素が通るかどうかをテストする。

var result = 【チェック対象の配列】.every(【チェックする関数】[, チェックする関数実行時にthisとするオブジェクト]);

チェック対象の配列に変化は発生しない。

【チェックする関数】が受け取るパラメータは
要素の値 element
要素のインデックス index
走査されている Array オブジェクト array

Array.some()

与えられた関数によって実行されるテストに、配列のいずれか1つ以上の要素が通るかどうかをテストする。

var result = 【チェック対象の配列】.some(【チェックする関数】[, チェックする関数実行時にthisとするオブジェクト]);

チェック対象の配列に変化は発生しない。

【チェックする関数】が受け取るパラメータは
要素の値 element
要素のインデックス index
走査されている Array オブジェクト array

Array.filter()

引数として与えられたテスト関数を各配列要素に対して実行し、それに合格したすべての配列要素からなる新しい配列を生成して返す

var new_array = 【元の配列】.every(【テスト関数】[, テスト関数実行時にthisとするオブジェクト]);

Array.forEach()

与えられた関数を、配列の各要素に対して一度ずつ実行。

【元の配列】.forEach(【コールバック関数】[, コールバック関数実行時にthisとするオブジェクト]);

【コールバック関数】が受け取るパラメータは
要素の値 element
要素のインデックス index
走査されている Array オブジェクト array

forEachの返り値はundefined。
元の関数を変化させない。

Array.map()

与えられた関数を配列のすべての要素に対して呼び出し、その結果からなる新しい配列を生成
元の配列に変化は発生しない。

var new_array = 【元の配列】.map(【コールバック関数】[, コールバック関数実行時にthisとするオブジェクト]);

【コールバック関数】が受け取るパラメータは
要素の値 element
要素のインデックス index
走査されている Array オブジェクト array

Array.reduce()

配列のすべての要素に対して与えられた関数を実行、最後にreturn した値を返す

var new_value = 【元の配列】.reduce(【コールバック関数】[,最初の値]);

【コールバック関数】が受け取るパラメータは
アキュムレータ  acc ※コールバックの戻り値を累積。累積値は、ひとつ前の戻り値、もしくは最初の値
現在渡されている要素の値 element
現在のインデックス index
ソースの配列 array

昔から使ってた

  • Array.indexOf()
  • Array.join()
  • Array.pop()
  • Array.push()
  • Array.shift()
  • Array.unshift()
  • Array.slice()
  • Array.splice()
  • Array.sort()
  • Array.reverse()

IE11未対応で使えなくて残念なメソッド

  • Array.find()
  • Array.includes()

配列以外でArrayのメソッドを使う

NodeList の場合

Array.prototype.forEach.call(NodeList_obj, function (node, index) {
  // 処理
});

連想配列の場合

Object.keys(hash_obj).forEach(function(key) {
  var item = this[key]; // this は hash_obj
}, hash_obj);

Object.keys で配列にするのと、第二引数でthisに対象のオブジェクトを渡すのがポイントか。(でもfor(var i in hash_obj) でもいいじゃん、という気持ちに…。)