#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)