简体   繁体   English

链接对象上的javaScript map / reduce

[英]javaScript map/reduce on linked objects

I have few objects that are linked between each other like a tables in database: 我很少有像数据库中的表那样相互链接的对象:

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"
            },
        ]
    }
};

And I have to create an object that will contain all linked data, like this: 而且我必须创建一个包含所有链接数据的对象,如下所示:

"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"
    }
}

Now I have big ugly loops and it doesn't like like it's the best way to join the objects. 现在我有一个大的丑陋循环,它不喜欢它是连接对象的最佳方法。 Maybe I can use map/reduce functions to automate the join I need? 也许我可以使用map / reduce函数自动执行所需的联接?

The below code generates an array of objects 下面的代码生成一个对象数组

 //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;
})

Now, I am not sure about the final format you need. 现在,我不确定所需的最终格式。 But if you want to have all of this in an object you can just write: 但是,如果您想将所有这些都放在一个对象中,则可以编写:

var resultObj = {'result' : resultArray };

However, unless you have proper meaningful names for the items in your resultObj, then I would recommend to stick by an array and iterate through numerical indices of the array. 但是,除非您为resultObj中的项目使用适当的有意义的名称,否则我建议您坚持使用数组并遍历数组的数字索引。

Hope this helps 希望这可以帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM