首页 > 解决方案 > 根据键名重构对象

问题描述

我让我们说这个对象

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'
  }

因此,如果数组中的值与原始对象中的键匹配,就会发生这种情况,有没有办法做到这一点?

标签: javascriptarraysobject

解决方案


您可以使用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)


推荐阅读