2013-10-23 31 views
0

我有一個數組的數組,其中值的位置很重要,因爲這些數據用於最終佈局網格。如何構建一個Javascript數組Delta

[[a,b,c,d],[a,b,c,d][a,b,c,d],[a,b,c,d]] // Original data 

基於動作,此「數據集」中的值可能會更改,但大小永遠不會更改。

[[a,b,c,d],[a,b,b,b][a,c,c,c],[a,b,c,d]] // Modified data 

我希望做的是返回只包含增量值數據集:

[[null,null,null,null,],[null,null,b,b],[null,c,null,c],[null,null,null,null,]] 

現在,我一直都知道數據集的最大X和Y,並可能只需簡單地循環訪問原始數據集,將其值與相應的值進行比較,然後構建一個新數組,但似乎可能有更高效的方法來完成此操作。

這就是說,我的js-fu最好是最小的,這就是爲什麼我要在這裏解決問題。是否有任何語言提供了完成此方法的方法?建議的方法?等等?

+0

如果你不知道關於兩個數組和修改的任何內容,那麼你將不得不循環。爲了提高效率,您對修改有什麼瞭解? – Bergi

回答

2

有點數組映射應該可以做到。

這裏有一個小提琴:http://jsfiddle.net/C8jnr/

考慮以下幾點:

var arr_A = [[a,b,c,d],[a,b,c,d],[a,b,c,d],[a,b,c,d]]; 
var arr_B = [[a,b,c,d],[a,b,b,b],[a,c,c,c],[a,b,c,d]]; 

function deltaArrays(arr1, arr2) 
{ 
    return arr1.map(function(el_arr,i,arr){ 
     return el_arr.map(function(el, j){ 
      return (el == arr2[i][j]) ? null : arr2[i][j]; 
     }); 
    }); 
} 

調用上的兩個deltaArrays會產生預期的三角陣列;

deltaArrays(arr_A, arr_B) = [[null,null,null,null,],[null,null,b,b],[null,c,null,c],[null,null,null,null,]] 
+0

這比我寫的更簡潔,但可讀性更強。謝謝! –

0

我不相信有內置的方式來做到這一點。最好的辦法是遍歷每個數組元素,並將它們與新數組進行比較,如果它們不同,則將其添加到列表/字典中。

相關問題