Реконструировать объект на основе имени ключа

#javascript #arrays #object

Вопрос:

У меня есть, скажем так, этот объект

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

Итак, если значение в массиве совпадает с ключом в исходном объекте, это происходит, есть ли способ это сделать?

Ответ №1:

Вы могли бы сделать это с помощью 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)