我正在尝试从元素列表中创建一个简单的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"
}
答案 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 ;
}
祝你好运:)