読者です 読者をやめる 読者になる 読者になる

素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

indexOf

function indexOf1(xs, x, n) {
  for (var i = n || 0, l = xs.length; i < l; i++)
    if (xs[i] === x)
      return i;
  return -1;
}

function indexOf2(xs, x, n) {
  xs.push(x);
  for (var i = n || 0; xs[i] !== x; i++)
    ;
  xs.pop();
  return i < xs.length? i: -1;
}

var xs = [];
var MAX = 1000000;
for (var i = 0; i < MAX; i++)
  xs.push(i);

console.time("indexOf1");
indexOf1(xs, MAX + 1);
console.timeEnd("indexOf1");

console.time("indexOf2");
indexOf2(xs, MAX + 1);
console.timeEnd("indexOf2");

Firefoxだと、
indexOf1: 16ms
indexOf2: 15ms
と、あまりかわらない。WebKitだと
indexOf1: 17ms
indexOf2: 11ms
と、番兵を付けたほうが少し早くなる。