2つの配列を比較するときに変更された値を取得する方法はありますか?配列とjavascript - 2つの配列を比較する方法
私はそれをよりよく説明します。
はのは、私が
arr1 = [1,2,3]
arr2 = [1,2,3]
arr2
が動的に作成されます、と私はarr2 = [0,2,3]
へarr2
は、どのように私は変更値を検出することができます変更した場合、デフォルトはarr1
と同じであるとしましょうか? (この場合、1が0に変更されました)?
2つの配列を比較するときに変更された値を取得する方法はありますか?配列とjavascript - 2つの配列を比較する方法
私はそれをよりよく説明します。
はのは、私が
arr1 = [1,2,3]
arr2 = [1,2,3]
arr2
が動的に作成されます、と私はarr2 = [0,2,3]
へarr2
は、どのように私は変更値を検出することができます変更した場合、デフォルトはarr1
と同じであるとしましょうか? (この場合、1が0に変更されました)?
を変更する必要がある場合値を使用すると、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);
これは、あなたがこのように使用することができ、簡単なコードスニペットがある:
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;
}
}
ありがとう、それは私がそれを必要と正確に動作します。再度、感謝します – Nick