我有一个数组数组,其中值的位置很重要,因为这些数据用于最终布局网格。
[[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 :(得分: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将产生预期的delta数组;
deltaArrays(arr_A, arr_B) = [[null,null,null,null,],[null,null,b,b],[null,c,null,c],[null,null,null,null,]]
答案 1 :(得分:0)
我不相信有这样做的内置方式。最好的办法是循环遍历每个数组元素并将它们与新数组进行比较,如果它不同,则将其添加到列表/字典中。