1

我有一个数组数组,其中值的位置很重要,因为该数据用于最终布局网格。

[[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 充其量是最小的,这就是我在这里提出问题的原因。是否有任何语言提供的方法来实现这一点?建议的方法?ETC?

4

2 回答 2

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,]]
于 2013-10-23T21:47:58.090 回答
0

我不相信有内置的方法可以做到这一点。最好的办法是遍历每个数组元素并将它们与新数组进行比较,如果不同则将其添加到列表/字典中。

于 2013-10-23T21:09:16.977 回答