[英]javaScript map/reduce on linked objects
我很少有像數據庫中的表那樣相互鏈接的對象:
var data = {}
data.Contracts = {
"RefferencesObject": {
"Refferencs": [
{
"amount": 0,
"refState": "a",
"refference": "REF1"
},
{
"amount": 850,
"refState": "a",
"refference": "REF2"
},
{
"amount": 2000,
"refState": "a",
"refference": "REF3"
}
]
},
"CardsObject": {
"Cards": [
{
"refference": "REF1",
"card": "0001"
},
{
"refference": "REF2",
"card": "0002"
},
{
"refference": "REF2",
"card": "0003"
},
{
"refference": "REF2",
"card": "0004"
},
{
"refference": "REF3",
"card": "0003"
},
{
"refference": "REF3",
"card": "0005"
}
]
},
"CardsStatesObject": {
"CardsStates": [
{
"cardState": "active",
"card": "0001"
},
{
"cardState": "closed",
"card": "0002"
},
{
"cardState": "closed",
"card": "0003"
},
{
"cardState": "active",
"card": "0004"
},
{
"panState": "closed",
"pan": "0005"
},
]
}
};
而且我必須創建一個包含所有鏈接數據的對象,如下所示:
"ResultObject" : {
{
"amount": 0,
"refState": "a",
"refference": "REF1",
"card" : "0001",
"cardState" : "active"
},
{
"amount": 0,
"refState": "a",
"refference": "REF2",
"card" : "0002",
"cardState" : "closed"
},
{
"amount": 0,
"refState": "a",
"refference": "REF2",
"card" : "0003",
"cardState" : "closed"
},
{
"amount": 0,
"refState": "a",
"refference": "REF2",
"card" : "0004",
"cardState" : "closed"
},
{
"amount": 0,
"refState": "a",
"refference": "REF3",
"card" : "0003",
"cardState" : "active"
},
{
"amount": 0,
"refState": "a",
"refference": "REF3",
"card" : "0005",
"cardState" : "active"
}
}
現在我有一個大的丑陋循環,它不喜歡它是連接對象的最佳方法。 也許我可以使用map / reduce函數自動執行所需的聯接?
下面的代碼生成一個對象數組
//I make some references to make coding easier and lines concise.
References = data.Contracts.RefferencesObject.Refferencs;
cardsObjects = data.Contracts.CardsObject.Cards;
cardsStates = data.Contracts.CardsStatesObject.CardsStates;
resultArray = References.map(function(item, index){
for (i=0;i<cardsObjects.length;i++){
if (cardsObjects[i].refference==item.refference){
item.card = cardsObjects[i].card;
for (j=0; j < cardsStates.length;j++){
if (cardsStates[j].card==item.card){
item.cardState=cardsStates[j].cardState;
}
}
}
}
return item;
})
現在,我不確定所需的最終格式。 但是,如果您想將所有這些都放在一個對象中,則可以編寫:
var resultObj = {'result' : resultArray };
但是,除非您為resultObj中的項目使用適當的有意義的名稱,否則我建議您堅持使用數組並遍歷數組的數字索引。
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.