-2

我正在开发一个比较两个数组的javascript应用程序(第二个数组是从主数组生成的,删除了引用)。应用程序的核心思想是将当前数组(主要)与次要(上次保存的状态)进行比较,以识别更改并采取相应措施。我面临的问题是有时主数组和辅助数组的值变得相同,我正在使用一个巨大的 javascript 来管理 html 画布。这就是为什么我也没有发布代码......

让我解释一下情况:数组 X -> 主数组,在鼠标移动时更新数组 Y -> 最后保存的状态,仅在鼠标单击时更新

一旦发生鼠标单击,数组将是相同的,并且在鼠标移动时“X”将得到更新,而不是“Y”。在 mouseup 动作时,'X' 与 'Y' 进行比较以检查所有值是否相同,一旦鼠标出现在屏幕右上角,值就会改变;那时'Y'得到更新。

有时是作品;有时它不会..我想知道为什么!

我正在考虑一种解决方案来锁定“Y”以防止编辑,即像一把锁。

4

3 回答 3

0

其实你的问题不在于数组本身。对象(它们是数组的项)通过引用另一个数组来复制。您需要克隆它们。在 javascript 中没有内置的方法或运算符,但您可以轻松地 google 即用型解决方案。

如果您有一系列原语并希望保护您的代码免受偶尔更改的影响,那么您可以Object.freeze在它可用时使用(并非所有浏览器都支持它)。调试也可能有用,但freeze可以帮助您确定代码中的确切位置,执行更改而不应该更改的位置。

抱歉,如果我没有回答您的问题 - 对我来说看起来有点含糊。

于 2013-09-06T10:40:18.347 回答
0

我猜你对mousedownclick事件感到困惑。

我建议您click仅使用该事件。所以这里是算法 -

var primary, secondary;

var equal = function(a,b){
    //Code for comparing 2 arrays
    if(a.length !== b.length) return false
    for(var i = 0 ; i < a.length; i++){
        if(a[i] !== b[i]) return false
    }
    return true;
};
window.addEventListener('mousemove', function(){
   primary = getData();//Some function which gets the data
});


window.addEventListener('click', function(){
    if(equal(primary, secondary) === true){
        //Perform some action 
    }else{
        //Array has been update
        //Perform some action
    }
    //update secondary array
    secondary = primary.slice(0);
});
于 2013-09-06T10:48:12.487 回答
0

我认为真正的问题是 Y 的更新是在你不期望的时候发生的,你需要调试 javascript 来找出原因。在更新代码上放一个断点,看看它什么时候不应该被调用,然后你就可以解决问题了。

如果您正在处理大量数据,则事件可能会延迟并且不会在您预期的时候发生。

于 2013-09-06T10:40:42.037 回答