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

JavaScriptでArrayの差分を取得する。

コード

(function(){
  var arrayDiff = function(that){
    var diffArr = [];
    for(var i=0,len=that.length; i < len; i++){
      var thisVal = this[i];
      var thatVal = that[i];
      if(JSON.stringify(thisVal) !== JSON.stringify(thatVal)){
        diffArr.push(thatVal);
      }
    }
    return diffArr;
  };

  Array.prototype.diff = arrayDiff;
}());

実行例

[1, 2, 3].diff([1, 3, 2]);
// => [3, 2]

[2, 3].diff([1, 2, 3]);
// => [1, 2, 3]

[{a:1}, {a:2}, {a:3}].diff([{a:1}, {b:2}, {a:function(){}}])
// => [{b:2}, {a:function(){}}]

解説

特徴としては JSON.stringify を使って、値を比較しているので、
インスタンスが異なるオブジェクトでもプロパティとその値が一致すれば、
同じと判定しているところです。