0

在我的页面中,我没有复选框,在加载页面时,我正在收集一些值并推送到一个名为 sendStatus1 的数组,我再次将值分配给另一个名为 submitView 的变量,

我分配的原因,我想检查两个数组是否相同或不同,如果两者不同,我会去发帖,否则我不会。

但作为一个动态变量,每次用户单击复选框时,两个数组都在更新,我看不到任何不同。

如何找到与加载状态不同的数组..?

我的尝试:

submitView = sendStatus1; //onload i do.

    var submitStatus = function(){

            var submitButton = $("span.submit").find("button[type='button']");

            console.log(submitView, sendStatus1); //but both are same always..


        }

如何存储 sendStatus1 在单击复选框时不可更新?如何提出这个问题..有人帮帮我吗?

4

2 回答 2

1

由于数组在 Javascript 中的存储方式,如果您将一个数组分配给另一个数组:

submitView = sendStatus1;

您将一个引用分配给另一个,然后两个引用都指向同一个数组。

你需要clone你的数组,你可以这样做:

submitView = sendStatus1.slice(0);

这会创建一个全新的数组副本,您可以将其用于比较。

于 2013-07-12T07:42:52.767 回答
0

...推送到一个名为 sendStatus1 的数组,我再次将值分配给另一个名为 submitView 的变量,

当您将某些内容推入数组时,您会修改该数组。它不会创建一个包含新值的数组。例如:

var a = [];        // Create an array
var b = a;         // Now both `a` and `b` point to the **same** array
a.push("hi");      // Modify the one array they both point to
console.log(b[0]); // "hi"

我们无法帮助您将上述原则应用于您自己的代码,因为您没有发布足够多的代码,但这可能就是您看到“两个数组”相同的原因。这不是两个数组,而是一个。

如果你真的想创建第二个数组,它是第一个数组的副本,然后添加到它,你可以这样做,但通常会有更好的答案。

var a = [];                // Create an array
a.push("First entry");     // Put something in it
var b = [].concat(a);      // Create a *new* array with copies of `a`'s entries
b.push("Second entry");    // Put something on the new array
console.log(a.join(", ")); // "First entry"
console.log(b.join(", ")); // "First entry, Second entry"

(从技术上讲,上面的效率有点低,因为创建并丢弃了一个临时数组。您也可以像这样复制一个数组:

var b = [];
b.push.apply(b, a);

...但它更复杂,我想保持上述简单。)

于 2013-07-12T07:42:26.437 回答