Javascript 如何将对象数组放入新的Json对象中

Javascript 如何将对象数组放入新的Json对象中,javascript,jquery,json,Javascript,Jquery,Json,我的页面上有几个下拉列表。根据这些下拉列表的选择,我想构建如下所示的Json对象: {"list":{"city":["1","2","3"],"businessName":["City1","AnotherCity"]}} 下拉列表事件: $(".chosen-select").each(function () { $id = this.id; $value = $(this).val(); }); 当然,我希望这是尽可能通用的,因此我得到$

我的页面上有几个下拉列表。根据这些下拉列表的选择,我想构建如下所示的Json对象:

{"list":{"city":["1","2","3"],"businessName":["City1","AnotherCity"]}}
下拉列表事件:

    $(".chosen-select").each(function () {
        $id = this.id;
        $value = $(this).val();
    });
当然,我希望这是尽可能通用的,因此我得到$id(在我的例子中是“城市”和“商业名称”),但在另一个页面上可能会有所不同

$value = $(this).val();
当然是所选值的数组,即:“[“1”、“2”、“3”]

我试过了,但不是我想要的

    var jsonObj = {
         list: []
    };

    $(".chosen-select").each(function () {
        $id = this.id;
        $value = $(this).val();

        var obj = {};
        obj[$id] = $value;
        jsonObj.list.push(obj);
    });
其结果是:

{"list":[{"city":["2","3"]},{"businessName":["KrakVenue1","KrakVenue3"]}]}
而不是我想要的

我该怎么做?
谢谢

因为您希望列表是一个对象,所以不要将其创建为数组

var jsonObj = {
     list: {}
};

$(".chosen-select").each(function () {
    var id = this.id,
        value = $(this).val();

    jsonObj.list[id] = value;
});

jsonObj.list上的Demo应该是您想要的对象,而不是数组,所以您不应该推送它

if (!jsonObj.list.hasOwnProperty(id)) {
    jsonObj.list[id] = value;
}
else {
    // key already exists.  What should you do with it?
    // if `value` is another array, you can use `.concat`
}
似乎
value
应该是一个数组,但它们是单独的值,如果要将它们视为数组,请使用:

if (!jsonObj.list.hasOwnProperty(id)) {
    jsonObj.list[id] = [];
}
jsonObj.list[id].push(value);

添加一把小提琴,这将使它变得更好。只是一个旁注:我们通常尝试为
jQuery
集合的变量保留
$
符号。这正是我想要的。谢谢。将在5分钟内接受。假设从选择器中选择
。选择
它是具有
多个
属性的
元素
.val()
返回所选选项的数组。@GabyakaG.Petrioli从不假设任何东西!@ExplosionPills fair point,但在这种情况下,使用
.val()
以及他以数组形式获得结果(他发布了他得到的结果)这一事实使得这一点没有问题。