获取 API 响应对象并替换(映射)所有键

Take an API response object and replace (map) all the keys

本文关键字:映射 替换 API 响应 对象 获取      更新时间:2023-09-26

我正在向JavaScript项目添加一些API,以用查找替换过去的多字段手动数据输入。(例如,我们希望停止询问您有关汽车的 20 个问题,而只需询问您的 VIN 并自动填充来自 VIN 解码器的其他 19 个答案。

我花费的时间比我希望将数据从响应架构映射到应用的现有内部架构的时间要多。 许多工作都需要人性化的接触来找出同义词,例如:

internal.postal_code = api.zipCode;

有时我发现自己写了一个非常粗糙的if,以避免有时在深树的半路上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上添加或覆盖属性比输出新对象更好。

试试这个:

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>';