在控制台中显示JSON密钥

时间:2016-08-28 21:49:07

标签: javascript arrays json

我无法在控制台中显示按键(“Apple iPhone 5S”,“Solio Mono太阳能充电器”,“24个月保修套装”)。 (基本上,用价格显示每个项目。)

我尝试使用JSON.parse(cart)并使用:

var arr = Object.keys(cart.Item).map(function(k) { return cart.Item[k] });

但控制台只显示:

[[object Object] {
  price: 299.99,
  productId: 688,
  url: "http://website.com/phone_iphone5s.html"
}, [object Object] {
  price: 29.95,
  productId: 655,
  url: "http://website.com/solio_charger.html"
}, [object Object] {
  price: 129.95,
  productId: 681,
  url: "http://website.com/24_month_warranty.html"
}]

我注意到" Item"被写为对象而不是数组。我应该将对象更改为数组,以便" .map"功能有效吗?

这是我的JSBin:JSBin

和我的代码:

var arr = Object.keys(cart.Item).map(function(k) { return cart.Item[k] });
// var arrStr = JSON.parse(cart);

// console.log(arrStr);

console.log(arr);
function myCart(){ 
  var myLen = cart.Item.count;
  console.log("Items: " + cart.Items);
  for(var i=0; i<myLen; i++){
    console.log("- " + cart.Item[i] + " (" + cart.Item[i].price + ")");
  }
  console.log("Total: " + cart.Total);
};

myCart();

这是原来的问题:

以下面的JSON对象为例:

cart = {
    "Items": 3,
    "Item": {
        "Apple iPhone 5S": {
            "productId": 688,
            "url": "http://website.com/phone_iphone5s.html",
            "price": 299.99
        },
        "Solio Mono Solar Charger": {
            "productId": 655,
            "url": "http://website.com/solio_charger.html",
            "price": 29.95
        },
        "24 Month Warranty Package": {
            "productId": 681,
            "url": "http://website.com/24_month_warranty.html",
            "price": 129.95
        }
    },
    "Total": 459.89
}

编写一个JavaScript函数,以完整的格式输出项目总数,每个项目的价格以及购物车的总价值,如下所示。代码量越少越好。

注意:JSON对象只是一个示例。代码应该适用于具有相同结构的任何JSON对象,因此不要使用硬编码密钥(“Apple iPhone 5S”,“Solio Mono Solar Charger”,“24个月保修包”)。

结果:

Items: 3
- Apple iPhone 5S ($299.99)
- Solio Mono Solar Charger ($29.95)
- 24 Month Warranty Package ($129.95)
Total: 459.89

2 个答案:

答案 0 :(得分:2)

这不是至少,但您仍然需要为购物车中的商品至少再增加两行,总计。使用\r\n创建折线。

&#13;
&#13;
var cart = {
    "Items": 3,
    "Item": {
        "Apple iPhone 5S": {
            "productId": 688,
            "url": "http://website.com/phone_iphone5s.html",
            "price": 299.99
        },
        "Solio Mono Solar Charger": {
            "productId": 655,
            "url": "http://website.com/solio_charger.html",
            "price": 29.95
        },
        "24 Month Warranty Package": {
            "productId": 681,
            "url": "http://website.com/24_month_warranty.html",
            "price": 129.95
        }
    },
    "Total": 459.89
},
cartInner = '';

// add total items;
cartInner += 'Items: '+ cart.Items;
// loop through items.
for(var item in cart.Item){
  cartInner += "\r\n"+'- '+ item + ' ($'+ cart.Item[item].price +')';
}
// add total
cartInner += "\r\n"+'Total: '+ cart.Total;
// ouput to console
console.log(cartInner);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

类似的东西:

var arr = Object.keys(cart.Item).map(function(k) { 
    return k + " ($" + cart.Item[k].price + ")";
});

您之前只是输出了对象。如果要输出具有特定格式的特定字符串,则需要显式形成返回以反映该特定字符串。