首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ES6存档从API映射对象密钥

使用ES6存档从API映射对象密钥
EN

Stack Overflow用户
提问于 2022-06-27 02:17:47
回答 1查看 123关注 0票数 0

我使用Vue 3向API发送POST数据。这些物体看起来就像

代码语言:javascript
复制
const externalResults: ref(null)

const resource = ref({
  id: null,
  name: null,
  state: {}
})

在向API发送数据之前,我将解析resource对象,以避免发送与state属性相关的嵌套对象。所以发送的有效载荷看起来

代码语言:javascript
复制
{
  id: 1,
  name: 'Lorem ipsum',
  state_id: 14
}

如果数据丢失/错误,则API返回422。

代码语言:javascript
复制
{
  "message":"Some fields are wrong.",
  "details":{
    "state_id":[
       "The state_id field is mandatory."
    ]
  }
}

因此,接下来的问题是:如何重命名对象键以删除,始终从键中删除字符串_id

由于我使用的是vuelidate,所以必须将返回的错误详细信息“映射”到建模属性名。现在我这样做是为了在请求完成后获得详细信息

代码语言:javascript
复制
externalResults.value = e.response.data.details

但也许我需要的是

代码语言:javascript
复制
externalResults.value = e.response.data.details.map(item => { // Something here... })

我想要一个1行的解决方案,不管它是使用ES6还是have。请注意,state_id只是一个示例,我需要删除许多以_id结尾的属性。

预期结果是

代码语言:javascript
复制
externalResults: {
  "state":[
       "The state_id field is mandatory."
  ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-27 02:27:01

我不知道您允许您的一行程序使用多长时间,但这正是我在ECMAScript中提出的,它使用Object.entries()Object.fromEntries()来反汇编和重新组装对象:

代码语言:javascript
复制
const data = {
  id: 1,
  name: 'Lorem ipsum',
  state_id: 14
};

const fn = (x) => Object.fromEntries(Object.entries(x).map(([k, v]) => [k.endsWith('_id') ? k.slice(0, -3) : k, v]));

console.log(fn(data));

通过使用带有正则表达式的replace(),您可以将其缩短一些:

代码语言:javascript
复制
const data = {
  id: 1,
  name: 'Lorem ipsum',
  state_id: 14
};

const fn = (x) => Object.fromEntries(Object.entries(x).map(([k, v]) => [k.replace(/_id$/, ''), v]));

console.log(fn(data));

如果使用lodash,则可以通过使用mapKeys()函数来缩短时间:

代码语言:javascript
复制
const data = {
  id: 1,
  name: 'Lorem ipsum',
  state_id: 14
};

const fn = (x) => _.mapKeys(x, (v, k) => k.replace(/_id$/, ''));

console.log(fn(data));
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72766419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档