2017-07-28 22 views
0

2つの配列を比較するときに変更された値を取得する方法はありますか?配列とjavascript - 2つの配列を比較する方法

私はそれをよりよく説明します。

はのは、私が

arr1 = [1,2,3] 
arr2 = [1,2,3] 

arr2が動的に作成されます、と私はarr2 = [0,2,3]arr2は、どのように私は変更値を検出することができます変更した場合、デフォルトはarr1

と同じであるとしましょうか? (この場合、1が0に変更されました)?

答えて

1

を変更する必要がある場合値を使用すると、Array#reduceを使用して変更の配列を作成できます。

var arr1 = [1, 2, 3]; 
 
var arr2 = [0, 2, 3]; 
 

 
function whatChanged(arr1, arr2) { 
 
    return arr2.reduce(function(d, v, i) { 
 
    v !== arr1[i] && d.push({ 
 
     index: i, 
 
     from: arr1[i], 
 
     to: v 
 
    }); 
 

 
    return d; 
 
    }, []); 
 
} 
 

 
var diff = whatChanged(arr1, arr2); 
 

 
    console.log(diff);

+0

ありがとう、それは私がそれを必要と正確に動作します。再度、感謝します – Nick

1

これは、あなたがこのように使用することができ、簡単なコードスニペットがある:

1)まず、単純に新しい配列の値を割り当てるためにupdateメソッドを使用しArrayObserver

2)を使って配列をラップ

3)onUpdatedコールバックの新しい要素を把握する

4)aObserver.array

でアレイにアクセスする

は、コードがあなたに理にかなっている場合は、私に教えてください、私たちはあなただけのインデックスが変更され、何が変更された値を知りたい場合は、何か

var array = [10, 15]; 
 
var aObserver = new ArrayObserver(array); 
 
aObserver.onUpdated(function(newValues, oldArray){ 
 
    console.log('New values are:'); 
 
    console.log(newValues); 
 
}); 
 

 
/* use the update method to assing new value of the array */ 
 
aObserver.update([10, 12]); 
 
aObserver.update([15, 12]); 
 

 
console.log('array values is'); 
 
console.log(aObserver.array); 
 

 

 
/* 
 
    Simple class that is holding the array and when array is updated through 
 
    this class it will give you the new values in a callback of onUpdated method 
 
*/ 
 
function ArrayObserver(array){ 
 
    var that = this; 
 
    var callback = null; 
 
    that.array = array; 
 
    that.update = function(newArray){ 
 
    
 
    var newValues = []; 
 
    /* get a copy of the old array */ 
 
    var oldValues = that.array.slice(); 
 
    
 
    for(var i = 0; i < newArray.length; i++){ 
 
     if(!~that.array.indexOf(newArray[i])){ 
 
     /* this is a new value */ 
 
     newValues.push(newArray[i]); 
 
     } 
 
    } 
 
    
 
    if(callback && {}.toString.call(callback) === '[object Function]'){ 
 
     callback(newValues, oldValues); 
 
    } 
 
     
 
    that.array = newArray; 
 
    } 
 
    
 
    that.onUpdated = function(cb){ 
 
    callback = cb; 
 
    } 
 
}

+0

私は私の特定のケースにそれを調整しようとしています、今のおかげで、私は、これは何らかの変更がある場合にしてくださいはい、私はあなたを助けることができる働いたか – Nick

+0

かどうかが表示されますそれが必要。私は考えを得ることを願っています:) – codtex

+0

はい、私は別の方法で更新を処理しているので、私はそれを調整する必要があり、このクラスを使用すると、それはすでにアップデートを処理する約束を使用しているので、私はアイデアを持っている、私はあなたがつまって取得した場合は、おかげで、もう一度感謝:) – Nick