[英]How do I add (push) items to an array one at a time (looping through array)
我无法想象这个奇怪的问题。 链接到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 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}
您只是一遍又一遍地修改data
的day
属性。 永远不会重新创建data
对象。
你的意思是这样做的吗?
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?
}
}
如果您确实想要克隆该对象,可以使用JQuery的扩展来实现。 或者,如果您在节点中,则扩展模块执行相同的操作。
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);
}
}
如果真实代码中的对象与您在问题中使用的对象一样简单,那么创建新对象可能更容易:
function addData(data)
{
for (i = 0; i < data.days.length; i++){
prices.push({
price: data.price,
day: data.days[i]
});
}
}
以下代码将起作用
function addData(data)
{
for (i = 0; i < data.days.length; i++){
prices.push({ day: data.days[i], price: data.price });
}
}
更改:
prices.push(data);
至:
prices.push({ day: data.days[i], price: data.price });
你的问题在这里:
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
}
}
您正在推送对同一对象的多个引用。 在循环的每次迭代中,您修改同一对象的.day
属性。
您需要在循环中创建一个新对象并推送:
function addData(data)
{
for (i = 0; i < data.days.length; i++){
prices.push({
day : data.days[i],
price : data.price
});
}
}
用这个
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.