javascript - 根据键名重构对象
问题描述
我让我们说这个对象
const data = {
'name-pl': 'something pl',
'name-en': 'something en',
'name-de': 'something de',
'content-pl': 'some content pl',
'content-en': 'some content en',
'content-de': 'some content de',
category: 'animals',
};
而这个数组
const array = ['name', 'content']
现在基于数组中的值,我想将此对象重建为:
const data = {
name:{
pl: 'something pl',
en: 'something en',
de: 'something de',
},
content:{
pl:'some content pl',
en:'some content en',
de:'some content de',
},
category: 'animals'
}
因此,如果数组中的值与原始对象中的键匹配,就会发生这种情况,有没有办法做到这一点?
解决方案
您可以使用for...in
循环来执行此操作array#includes
,并且
- 遍历对象的每个键,
- 把钥匙分成两部分,
- 如果第一部分在
array
创建一个具有其名称的新子对象,并将第二部分放在其中。 - 如果不保持原样并继续前进。
演示:
const data = {
'name-pl': 'something pl',
'name-en': 'something en',
'name-de': 'something de',
'content-pl': 'some content pl',
'content-en': 'some content en',
'content-de': 'some content de',
category: 'animals',
};
const array = ['name', 'content']
let result = {}
for (let key in data) {
let [prefix, suffix] = key.split("-")
if (array.includes(prefix)) {
result[prefix] = {...result[prefix], [suffix]: data[key]}
}
else {
result[key] = data[key]
}
}
console.log(result)
推荐阅读
- c# - 如何动态构建ctor
- genexus - GeneXus 翻译问题
- apache2 - Apache2 后面的 tomcat9 上的地理服务器无法正常工作(在某些请求中找不到 404)
- python - 在 line2D [matplotlib] 的 pick 事件中一次获取选中的行
- vue.js - VueJS - 基于表单选择的隐藏和显示
- python - 如何在组中创建提要(Adafruit io Python)
- sql - 如何在 SQL 中获取过去 12 个月的特定时间窗口
- unit-testing - gcov / clang / gtest:一行内几个块的代码覆盖率?
- python - 为什么 Groupby 多列不起作用
- javascript - Vue.js 如何使用 v-model 和计算属性以及复选框来镜像输入字段