2015-08-17 53 views
1

我有之间相互链接就像一个表中的数据库几个对象:Javascript地图/减少对链接对象

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函数来自动执行我需要的连接?

+1

你期望的结果是无效的JavaScript对象,所以难怪你不能创建 –

+0

@JaromandaX为什么无效?我可能会错误,但我有一个目标只是为了显示我想要达到的效果 – Daria

+0

javascript对象的一般形式:'{nameValuePair1,nameValuePair2,... nameValuePairN}'...'nameValuePair' - 成对的名称(字符串)和值(任意值),其中名称与冒号分隔。 - 见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object –

回答

1

下面的代码生成对象

//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的项目适当的有意义的名字,然后我会建议通过在阵列和迭代坚持通过数组的数字指标。

希望这有助于

+0

展望辉煌!谢谢) – Daria