如何构建Javascript数组Delta

时间:2013-10-23 21:02:59

标签: javascript arrays performance algorithm

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

[[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充其量只是最小的,这就是我在这里解决问题的原因。是否有任何语言提供了实现此目的的方法?建议的方法?等?

2 个答案:

答案 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)

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