如何一次将一个项目添加(推送)到一个数组(循环遍历数组)
Posted
技术标签:
【中文标题】如何一次将一个项目添加(推送)到一个数组(循环遍历数组)【英文标题】:How do I add (push) items to an array one at a time (looping through array) 【发布时间】:2015-09-19 05:29:22 【问题描述】:我无法解决这个奇怪的问题。 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 个项目(您可以查看是否记录输出)
而且它没有正确设置我的 day 变量,day 总是设置为 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
【问题讨论】:
【参考方案1】:您只是一遍又一遍地修改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's extend 这样做。或者如果你在 node 中,extend 模块也会做同样的事情。
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]
);
【讨论】:
不,我想将数据多次推送到数组,但每次都使用修改后的日期值。 最后有一个包含三个项目的数组,每个项目都有一个价格和一个天值(如 1 或 3) 谢谢,了解这两件事很有用 很高兴为您提供帮助。祝你好运:)【参考方案2】:以下代码将起作用
function addData(data)
for (i = 0; i < data.days.length; i++)
prices.push( day: data.days[i], price: data.price );
【讨论】:
谢谢,这正是我想要的。【参考方案3】:变化:
prices.push(data);
收件人:
prices.push( day: data.days[i], price: data.price );
【讨论】:
【参考方案4】:你的问题在这里:
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
【讨论】:
【参考方案5】:您将多个引用推送到同一个对象。在循环的每次迭代中,您修改同一对象的.day
属性。
您需要在循环中创建一个新对象并推送它:
function addData(data)
for (i = 0; i < data.days.length; i++)
prices.push(
day : data.days[i],
price : data.price
);
【讨论】:
【参考方案6】:使用这个
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;
【讨论】:
以上是关于如何一次将一个项目添加(推送)到一个数组(循环遍历数组)的主要内容,如果未能解决你的问题,请参考以下文章
如何一次循环遍历 2 个数组并将数组中的颜色分配给另一个数组的每个值