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

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】:

您只是一遍又一遍地修改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 这样做。或者如果你在 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 个数组并将数组中的颜色分配给另一个数组的每个值

如何一次将值从数组中移出一个?

如何在单击多个项目时使用 jQuery 循环遍历数组?

如何在 Django 中一次将多个对象添加到 ManyToMany 关系?

您如何一次将文本区域动态添加到页面?

如何一次将多个关系保存到 CoreData?