在Javascript中自定义对象

时间:2016-08-09 07:33:34

标签: javascript

请帮助我在javascript中对这些对象进行自定义,我有点卡住了。

对象

var stocks = [
{
    "size": "2",
    "count": 5,
    "store": {
        "id": 3,
        "title": "Belconnen"
    }
},
{
    "size": "3",
    "count": 4,
    "store": {
        "id": 4,
        "title": "Canberra"
    }
},
{
    "size": "4",
    "count": 4,
    "store": {
        "id": 5,
        "title": "Bankstown"
    }
},
{
    "size": "5",
    "count": 5,
    "store": {
        "id": 4,
        "title": "Canberra"
    }
}];

预期输出

{3:{"sizes": {2: 3}}},
{4:{"sizes": {3: 3, 5: 3}}},
{5:{"sizes": {4: 3}}}

到目前为止我的代码

for (var key in stocks) {
    var stock = stocks[key];

    stores[stock.store.id] = stock.store;
    var store = stores[stock.store.id];

    if (!store.sizes || !store.sizes.length) {
        store.sizes = [stock.size];
    }
}

但它会一直覆盖商店的第一个尺寸值。

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是解决问题的一种方法

    var stocks = [
    {"size": 2, "count": 3, "store": {"id": 3, "name": "Canberra"}}, 
    {"size": 3, "count": 3, "store": {"id": 4, "name": "Belconnen"}},
    {"size": 4, "count": 3, "store": {"id": 5, "name": "Bankstown"}},
    {"size": 5, "count": 3, "store": {"id": 4, "name": "Belconnen"}}];
    
    var obj = {};
    
    stocks.forEach(function(item){
        // initialize if object key not present
        if(!obj[item.store.id]){
           obj[item.store.id] = {"sizes": {}};
        }
        obj[item.store.id]["sizes"][item.size] = item.count;  
    });
    
    console.log(obj);

这是工作小提琴https://jsfiddle.net/flyinggambit/nc3uny53/

检查控制台窗口是否有小提琴输出