我无法解决这个奇怪的问题。 Link to Jsbin
我尝试使用点击功能向数组(prices
)添加值。当用户单击按钮时,它会将定价数据添加到Javscript数组prices
。
我需要一次添加多个数据条目,其中包含价格但不同的day
。
这是#add_pricing的点击功能。
$("#add_pricing").click(function(e){
e.preventDefault();
data = {
"price": "1200",
"days": ["1","3","4"]
}
addData(data);
console.log(prices)
});
因此,当用户点击它时,您可以看到它将data
变量发送到addData,即:
function addData(data)
{
for (i = 0; i < data.days.length; i++){
data.day = data.days[i]; //eg. data.day = "1"
prices.push(data);
}
}
因此addData()
函数循环遍历data.days,我希望它将条目推送到prices
数组,但一次一个。
但相反,它似乎每次都会推送所有4个项目(您可以查看是否记录输出)
并且它没有正确设置我的日期变量,白天总是设置为4,即使我记录输出,它似乎显示正确的。
预期产出:
[1] => {day: 1, price: 1200}
[2] => {day: 3, price: 1200}
[3] => {day: 3, price: 1200}
实际输出
[1] => {day: 4, price: 1200}
[2] => {day: 4, price: 1200}
[3] => {day: 4, price: 1200}
答案 0 :(得分:1)
您只是一遍又一遍地修改day
的{{1}}属性。永远不会重新创建data
对象。
你的意思是这样做吗?
data
如果您确实要克隆该对象,可以使用JQuery's extend来执行此操作。或者,如果您在节点中,extend模块也会执行相同的操作。
function addData(data)
{
for (i = 0; i < data.days.length; i++){
data.day = data.days[i]; //eg. data.day = "1"
prices.push(data.day); // push data.day?
}
}
如果真实代码中的对象与您在问题中使用的对象一样简单,那么创建新对象可能更容易:
function addData(data)
{
for (i = 0; i < data.days.length; i++){
var newData = $.extend({}, data);
newData.day = data.days[i]; //eg. data.day = "1"
prices.push(newData);
}
}
答案 1 :(得分:1)
以下代码可以使用
function addData(data)
{
for (i = 0; i < data.days.length; i++){
prices.push({ day: data.days[i], price: data.price });
}
}
答案 2 :(得分:1)
变化:
prices.push(data);
要:
prices.push({ day: data.days[i], price: data.price });
答案 3 :(得分:0)
你的问题在这里:
function addData(data)
{
for (i = 0; i < data.days.length; i++){
data.day = data.days[i]; //eg. data.day = "1"
prices.push(data[i]); //this needs to only add the current object not the entire array of objects
}
}
答案 4 :(得分:0)
您正在推送对同一对象的多个引用。在循环的每次迭代中,您修改同一对象的.day
属性。
您需要在循环中创建 new 对象并推送:
function addData(data)
{
for (i = 0; i < data.days.length; i++){
prices.push({
day : data.days[i],
price : data.price
});
}
}
答案 5 :(得分:0)
使用此
function addData(data)
{
for (i = 0; i < data.days.length; i++){
data.day = data.days[i]; //eg. data.day = "1"
if(prices.length > 0)
prices[prices.length] = data;
else
prices[0] = data;
}
}