使用循环访问已选中的单选按钮的对象填充数组每次都会给出相同的值

问题描述 投票:0回答:2

代码如下:

$(".day_a_radio").change(function()     
    var radio_array = [];
    var radio_object = {};

    $("input.day_a_radio:checked").each(function() {
        radio_object["id"] = $(this).data("id");
        radio_object["date"] = $(this).data("date");
        radio_object["type"] = $(this).data("type");

        radio_array.push(radio_object);
    });

    console.log(radio_array);

我有几十个单选按钮,其中包含id,date和type的数据属性。当点击其中一个时,我会遍历所有这些。然后在该循​​环中,对于每个被检查的,我用对象填充数组。

但是,当我执行console.log时,尽管所有单选按钮具有不同的值,但ID,日期和类型都是相同的

enter image description here

有任何想法吗?

javascript jquery
2个回答
3
投票

您必须创建一个新对象,否则将重复更新和推送相同的对象。

$(".day_a_radio").change(function(){
    var radio_array = [];
    var radio_object = {};

    $("input.day_a_radio:checked").each(function() {
        // MAKE A NEW OBJECT
        radio_object = {};
        radio_object["id"] = $(this).data("id");
        radio_object["date"] = $(this).data("date");
        radio_object["type"] = $(this).data("type");

        radio_array.push(radio_object);
    });

你也可以用地图简化一下。

$(".day_a_radio").change(function(){
    var radio_array = $("input.day_a_radio:checked").map(function() {
        var $this = $(this);
        return {
            id: $this.data("id"),
            date: $this.data("date"),
            type: $this.data("type")
        };
    }).get();
});

1
投票

每当你需要每次创建一个新副本而不是推送时,你都会将same reference推送到数组

$(".day_a_radio").change(function()     
    var radio_array = [];

    $("input.day_a_radio:checked").each(function() {
        var obj = {}   // It creates a new object everytime
        obj["id"] = $(this).data("id");
        obj["date"] = $(this).data("date");
        obj["type"] = $(this).data("type");

        radio_array.push(obj);
    });

    console.log(radio_array);
© www.soinside.com 2019 - 2024. All rights reserved.