2016-04-27 121 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>';