Javascript 将值推送到jquery中的数组
我有项目列表Javascript 将值推送到jquery中的数组,javascript,jquery,arrays,asp.net-mvc,list,Javascript,Jquery,Arrays,Asp.net Mvc,List,我有项目列表数据和空数组报价: var data = {}; var quotations = []; 我想用数据值填充quotes,每次我添加新数据时,它都会成功添加,但所有数据值都会得到最后一个值 例如: $("#addquotation").click(function () { debugger; var itemname = $("#itemname").val(); var cost =parseFloat( $("#c
数据和空数组报价
:
var data = {};
var quotations = [];
我想用数据值填充quotes
,每次我添加新数据时,它都会成功添加,但所有数据值都会得到最后一个值
例如:
$("#addquotation").click(function () {
debugger;
var itemname = $("#itemname").val();
var cost =parseFloat( $("#cost").val());
var notes = $("#notes").val();
var date = $("#date").val();
data.Item = itemname;
data.Cost = cost;
data.Notes = notes;
data.Date = date;
quotations.push(data);
)};
我第一次补充说
“test,45,testnotes,2016-02-03”我第二次添加
“test2,45.2,TestNotes2016-02-05”
调试时,我获取的数据如下所示:
obj(0):“测试2,45.2,测试说明2016-02-05”
obj(1):“测试2,45.2,测试说明2016-02-05”
似乎它将最后一个版本附加到所有数据中
请给我一些建议。谢谢您需要在单击处理程序中声明数据,如果它声明为全局变量,您基本上总是在修改相同的数据对象并将其添加到数组中:
var quotations = [];
$("#addquotation").click(function () {
debugger;
var data = {};
var itemname = $("#itemname").val();
var cost =parseFloat( $("#cost").val());
var notes = $("#notes").val();
var date = $("#date").val();
data.Item = itemname;
data.Cost = cost;
data.Notes = notes;
data.Date = date;
quotations.push(data);
)};
自从在click处理程序外部声明了
data
之后,每次都推送相同的对象引用
更改为:
var data={};
$("#addquotation").click(function () {
到
问题在于
data
是一个全局变量,您将对data
的引用添加到quotes
当第一个值被推送到quotes
时,data
和quotes[0]
引用同一对象。下面是正在发生的事情的一个例子:
var a = {num: 1};
var b = a;
b.num = 2;
console.log(a.num); // prints 2
将对象推送到数组时也会发生同样的情况<代码>报价单不包含数据的副本
,它包含对数据的引用
,因此修改数据
也会修改报价单
。要解决此问题,引用的每个元素必须引用不同的数据对象。这可以通过在函数内部而不是外部定义数据来实现
替换
var data = {};
$("#addquotation").click(function() {
// populate data, push to quotations
});
与
var data = {};
$("#addquotation").click(function() {
// populate data, push to quotations
});
$("#addquotation").click(function() {
var data = {};
// populate data, push to quotations
});