比較兩個數組時有沒有辦法獲得更改的值?數組和javascript - 如何比較兩個數組
我會更好地解釋它。
讓我們說我有
arr1 = [1,2,3]
arr2 = [1,2,3]
arr2
得到動態創建的,默認是一樣的arr1
當我改變arr2
到arr2 = [0,2,3]
我怎麼能檢測到變化的價值? (在這種情況下,1變爲0)?
比較兩個數組時有沒有辦法獲得更改的值?數組和javascript - 如何比較兩個數組
我會更好地解釋它。
讓我們說我有
arr1 = [1,2,3]
arr2 = [1,2,3]
arr2
得到動態創建的,默認是一樣的arr1
當我改變arr2
到arr2 = [0,2,3]
我怎麼能檢測到變化的價值? (在這種情況下,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)首先纏上ArrayObserver
2)您的數組,那麼只需使用update
方法來分配新的數組值
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