javascript - 短属性名称和长属性名称之间的映射

标签 javascript properties

我的 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/

相关文章:

javascript - 将表达式传递给 Jest.unmock

javascript - 我什么时候应该初始化 javascript 属性?

objective-c - 只读属性如何工作

c# - Visual Studio 设计时属性 - 表单列表下拉列表

linux - 反转属性名称和值

class - 复制 Groovy 类属性

php - 按键盘上的 Enter 键提交表单

javascript - JS async wait 不等待,不阻塞进程

javascript - 我希望进度条在视口(viewport)中填充或变空,但只有一次

javascript - "use strict"导致未定义的错误