2016-04-27 76 views
0

我正在向JavaScript項目中添加一些API,以便用查找替換以前用於多字段手動數據輸入的內容。 (例如,我們想停止詢問20個關於汽車的問題,而只是詢問你的VIN並自動提供來自VIN解碼器的其他19個答案。)獲取API響應對象並替換(映射)所有鍵

我花費的時間比我想要的映射數據多從響應模式到我的應用程序的現有內部模式。工作很多需要人情味,以蘇斯出同義詞,如:

internal.postal_code = api.zipCode; 

有些時候,我發現自己寫一個非常粗糙的if避免sometimes- null或丟失的對象中途下了深樹,像

if(api.a && api.a.b && api.a.b.c){ 
    internal.z = api.a.b.c.d; 
} 

有沒有一個好的圖書館,讓我寫一個簡單的地圖,併爲我做這一切工作?一個地圖可能看起來像:

map = { 
    'zipCode' : 'postal_code', 
    'a.b.c.d' : 'z' 
}; 

mapperTool(api, internal, map); 

(注意internal對象是從幾個API和預先存在的工具縫合在一起,在internal因此增加或覆蓋性能比輸出新的對象比較好)。

回答

0

試試這個:

function mapperTool(source, desc, map) { 
 
    Object.keys(map).forEach(function(key) { 
 
     var value = key.split('.').reduce(function(obj, name) { 
 
      if (obj && obj[name]) { 
 
       return obj[name]; 
 
      } 
 
     }, source); 
 
     desc[map[key]] = value; 
 
    }); 
 
} 
 
var map = { 
 
    'zipCode' : 'postal_code', 
 
    'a.b.c.d' : 'z' 
 
}; 
 
var internal = {}; 
 
mapperTool({a:{b:{c:{d: 10}}},zipCode:20}, internal, map); 
 
document.body.innerHTML = '<pre>' + JSON.stringify(internal, true, 4) + '</pre>';