遍历JQuery中的项目并输出JSON对象

时间:2019-06-10 08:46:42

标签: jquery json

我正在尝试从元素列表中创建一个简单的JSON对象,并以特定格式输出(将其发送到服务器)。

我不确定如何正确执行此操作以获得所需的输出。到目前为止,我已经遍历了项目并获得了相关数据:

    function getCartItems() {
        cart_data = [];
        $('.cart-item').each(function(){
            var sku = $(this).data('sku'),
                qty = $(this).find('input.cart-item-qty').val();
            item = {};
            item[sku] = qty;
            cart_data.push(item);
        });
        return cart_data;
    }

这给了我一系列预期的东西:

[
    {"sku1":"1"},
    {"sku2":"1"}
]

但是我想尝试的格式如下:

{
    "sku1":1,
    "sku2":1
}

此输出随后将在以下函数中使用:

function getData() {
    var cart_items = getCartItems();
    return JSON.stringify({"items":cart_items,"ref":"123"});
}

最终输出将是:

{
    "items": {
        "sku1": 1,
        "sku2": 1
    },
    "ref": "123"
}

2 个答案:

答案 0 :(得分:1)

当目标输出是一个对象时,您正在创建一个数组。不必将新对象推送到数组,而是可以定义一个父对象并在其中设置键/值对,如下所示:

function getCartItems() {
  var cart_data = {};
  $('.cart-item').each(function() {
    cart_data[$(this).data('sku')] = $(this).find('input.cart-item-qty').val();
  });
  return cart_data;
}

答案 1 :(得分:0)

尝试一下:

1。。只需创建一个空对象,即

let result = {};

2。然后写:

 cart_data.forEach(i => Object.assign(result ,i))

3。。最后返回result

return result;

完整代码

    function getCartItems() {
        cart_data = [];
        let result = {};
        $('.cart-item').each(function(){
            var sku = $(this).data('sku'),
                qty = $(this).find('input.cart-item-qty').val();
            item = {};
            item[sku] = qty;
            cart_data.push(item);
        });

        cart_data.forEach(i => Object.assign(result ,i))
        return result ;
    }

祝你好运:)