2016-08-15 65 views
0

夥計們,您可以幫助完成對象的自定義。我想索引正確的對象,但對象的當前輸出是索引是商店的ID。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" 
    } 
}]; 

電流輸出

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

我當前的代碼

var result = function (data) { 
    var stores = {}, 
     sizes = Object.create(null), 
     i = 0; 

    data.forEach(function (item) { 
     var index = i; 

     if (!stores[index]) { 
      stores[index] = { sizes: {} }; 
      Object.keys(sizes).forEach(function (key) { 
       stores[index].sizes[key] = 0; 
      }); 
     } 

     if (!sizes[item.size]) { 
      Object.keys(stores).forEach(function (key) { 
       stores[key].sizes[item.size] = 0; 
       sizes[item.size] = true; 
      }); 
     } 

     stores[index].sizes[item.size] = item.count; 

     i++; 
    }); 
    return stores; 
}(stocks); 

console.log(result); 

我的期望輸出

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

在此先感謝。

+0

*「我想索引對象正確」*是什麼意思?你的邏輯是什麼? – RomanPerekhrest

+0

如果我把你在小提琴中提供的代碼給了我預期的輸出。 [Object Reorganize](https://jsfiddle.net/qsxzrmt2/1/)。你能給我關於你的JavaScript文件的更多信息嗎?你如何通過股票對象? –

+0

你能否請求提供關於你試圖實現的邏輯的更多信息?外部物體的標誌是什麼?大小對象中鍵的值應該是多少?如何映射在一起?我的輸出也得到了不同的結果。在你列出的輸出和你的預期輸出中,你總是有3個,但看起來應該是5,4,4,5? –

回答

1

這裏是代碼,以獲得通過店鋪標識鍵的對象結構,然後通過大小ID:

function stocksByStore(stocks) { 
 
    var stores = {}, sizes = []; 
 
    for (var stock of stocks) { 
 
    var storeSizes = (stores[stock.store.id] || 
 
         (stores[stock.store.id] = { sizes: {} })).sizes; 
 
    storeSizes[stock.size] = (storeSizes[stock.size] || 0) + stock.count; 
 
    sizes[stock.size] = 1; 
 
    }; 
 
    for (var store in stores) { 
 
    for (var size in sizes) { 
 
     stores[store].sizes[size] = stores[store].sizes[size] || 0; 
 
    } 
 
    } 
 
    return stores; 
 
} 
 

 
// sample input 
 
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" } 
 
}]; 
 

 
// conversion 
 
var stores = stocksByStore(stocks); 
 

 
// output 
 
console.log(stores);

注意,這不同於您預期的輸出,但我認爲這是使用storeId值作爲主對象的關鍵字更有用,而不是增量編號,您不知道它指向哪個存儲庫。