我的 Web 服务返回具有单字母属性名称的对象。因为我想在 JavaScript 代码中使用可读属性,所以我通常会执行与此类似的过程:
$.getJSON('bla').done(res => {
myResult = {
hello: res.h,
world: res.w
};
});
或者
$.getJSON('bla').done(res => {
res.hello = res.h; delete res.h;
res.world = res.w; delete res.w;
myResult = res;
});
另一个问题是,当我想将该对象回调到服务器时,我必须以相反的方式重复该过程。
因此我的问题是,是否存在某种简化的双向映射器方法,或者类似隐式强制转换运算符的方法。
最佳答案
这是一个选项,使用两个相互映射的键数组,以及一个辅助函数,该函数将具有其中一个键集的对象转换为具有另一个键集的对象:
const transformObj = (obj, from, to) => Object.fromEntries(
from.map((fromKey, i) => [to[i], obj[fromKey]])
);
const short = ['a', 'b', 'c'];
const long = ['aaa', 'bbb', 'ccc'];
console.log(transformObj({ a: 'foo', b: 'bar', c: 'baz' }, short, long));
console.log(transformObj({ aaa: 'zzz', bbb: 'yyy', ccc: 'xxx' }, long, short));
也就是说,这感觉像是一个 X/Y 问题。它引入了不必要的复杂性,并且非常短的属性可以说使内容更难以阅读。为了保持一致性,我会考虑让您的后端发送一个稍后不需要转换的对象。
关于javascript - 短属性名称和长属性名称之间的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58336918/