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

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

連絡先: twitter: @javascripter にどうぞ。

Array#remove(Array#indexOfの第二引数の使いかた)

indexOf - MDNによると、Array#indexOfの第二引数を指定すると、途中から検索できるらしい。
これを使って、Array#removeを実装すると、毎回、全部をindexOfで探索するよりかなり速くすることができる。

Array.prototype.remove = function remove() {
  var self = this;
  Array.forEach(arguments, function (target) {
    var current = 0;
    while (~(current = Array.indexOf(self, target, current)))
      Array.splice(self, current, 1);
  });
  return this;
};

Array.remove = function remove(target) {
  return Array.prototype.remove.apply(target, Array.slice(arguments, 1));
};

console.log([1, 2, 3, 4, 5, 6, 1, 1, 2, 3, 4].remove(3, 1)); // [2, 4, 5, 6, 2, 4]


console.log(Array.remove({0:1,
  1:2,
  2:3,
  3:3,
  4:1,
  length: 5}, 3));