在我的页面中,我没有复选框,在加载页面时,我正在收集一些值并推送到名为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不可更新? 如何提出这个问题..有人帮我吗?
答案 0 :(得分:1)
由于数组存储在Javascript中的方式,如果您将数据分配给另一个:
submitView = sendStatus1;
将一个引用分配给另一个,然后两个引用都指向同一个数组。
你需要clone
你可以这样做的数组:
submitView = sendStatus1.slice(0);
这会创建一个可用于比较的数组的全新副本。
答案 1 :(得分:0)
...推送到一个名为sendStatus1的数组,我再次将该值赋给其他名为submitView的变量,
当您将某些内容推送到数组中时,您可以修改该数组。它不会创建带有新值的 new 数组。例如:
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);
......但它更复杂,我想保持上述简单。)