我使用Vue 3向API发送POST数据。这些物体看起来就像
const externalResults: ref(null)
const resource = ref({
id: null,
name: null,
state: {}
})在向API发送数据之前,我将解析resource对象,以避免发送与state属性相关的嵌套对象。所以发送的有效载荷看起来
{
id: 1,
name: 'Lorem ipsum',
state_id: 14
}如果数据丢失/错误,则API返回422。
{
"message":"Some fields are wrong.",
"details":{
"state_id":[
"The state_id field is mandatory."
]
}
}因此,接下来的问题是:如何重命名对象键以删除,始终从键中删除字符串_id?
由于我使用的是vuelidate,所以必须将返回的错误详细信息“映射”到建模属性名。现在我这样做是为了在请求完成后获得详细信息
externalResults.value = e.response.data.details但也许我需要的是
externalResults.value = e.response.data.details.map(item => { // Something here... })我想要一个1行的解决方案,不管它是使用ES6还是have。请注意,state_id只是一个示例,我需要删除许多以_id结尾的属性。
预期结果是
externalResults: {
"state":[
"The state_id field is mandatory."
]
}发布于 2022-06-27 02:27:01
我不知道您允许您的一行程序使用多长时间,但这正是我在ECMAScript中提出的,它使用Object.entries()和Object.fromEntries()来反汇编和重新组装对象:
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(),您可以将其缩短一些:
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()函数来缩短时间:
const data = {
id: 1,
name: 'Lorem ipsum',
state_id: 14
};
const fn = (x) => _.mapKeys(x, (v, k) => k.replace(/_id$/, ''));
console.log(fn(data));<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
https://stackoverflow.com/questions/72766419
复制相似问题