javascript - 如何一次将一个项目添加(推送)到数组中(循环遍历数组)

标签 javascript jquery arrays for-loop push

我无法解决这个奇怪的问题。 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 个项目(您可以查看是否记录输出)

enter image description here

并且它没有正确设置我的天变量,天总是设置为 4,即使我记录输出,它似乎显示正确的。

enter image description here

预期输出:

[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}

最佳答案

您只是在一遍又一遍地修改dataday 属性。 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这样做。或者,如果您在节点中,则 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]
        });
    }
}

关于javascript - 如何一次将一个项目添加(推送)到数组中(循环遍历数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31171795/

相关文章:

javascript - 在 div 中嵌入部分元素

javascript - 如何在 jquery 中使用 php while 循环中生成的唯一 ID

php - 如何使用PHP从字符串中删除一些字符

php - 在 MySQL 表列上存储多个值并在查询中使用它们?

ruby - 比较具有相同元素的三个数组的顺序

javascript - 设备模式下 Web API 调用失败

javascript - 如何通过 ajax 获取一个标签而不是整页的值 - jQuery

javascript - 如何在 <text> 元素中使用 CSS 过渡效果?

jquery - 使用 jQuery 删除 <html> 上方和下方的标记 </html>

javascript - 使用 jQuery 通过更改 src 属性对一个图像标签进行动画处理