簡體   English   中英

鏈接對象上的javaScript map / reduce

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM