JavaScriptのindexOfは文字列だけでなく配列にも使える

JavaScriptのindexOfは文字列だけでなく配列にも使える

indexOfは文字列だけでなく配列にも使える

JavaScriptにindexOfというメソッドがある。これを文字列にしか使えないものと誤解されているケースがある。

しかし実際にはindexOfは文字列だけでなく配列にも使える。

なぜそのような誤解をされることがあるかというとindexOfは初期のころは文字列には使用できたが配列には使用できなかったためだ。

ちなみにIEだとindexOfが配列でも使用できるようになったのはIE9からだ。

indexOfの配列での使用方法

文字列のときと同じく存在していればその場所を数値で返し、存在しなければ-1を返す。

var member = ['sato', 'suzuki', 'takahashi'];

function isMember(name) {
  if(member.indexOf(name) !== -1) {
    console.log(name + 'さんはいます。');
  } else {
    console.log(name + 'さんはいません。');
  }
}

isMember('suzuki');
// => suzukiさんはいます。
isMember('yamada');
// => yamadaさんはいません。

データの重複追加防止にも使用できる

例えばこのようにindexOfですでにデータがあるかをチェックすればデータが重複して追加されることがなくなる。

var totalScore = 0;
var member = [];

function addAll(data) {
  if(member.indexOf(data.name) === -1) {
    member.push(data.name);
    totalScore += data.score;
  }
}

var data = [{
  name: 'sato',
  score: 100
}, {
  name: 'suzuki',
  score: 200
}, {
  name: 'takahashi',
  score: 300
}];

data.forEach(addAll);
data.forEach(addAll);
// 2つ目はデータ重複のため追加されない

console.log(member);
// => ['sato', 'suzuki', 'takahashi']
console.log(totalScore);
// => 600