#javascript #arrays #dictionary #object #ecmascript-6
#javascript #массивы #словарь #объект #ecmascript-6
Вопрос:
Вот один объект:
const language = {
fluency: {
"English": "Advanced",
"French": "Intermediate"
},
read: ["English", "French"],
speak: ["English"],
write: ["English"]
};
И я пытаюсь преобразовать в массив объекта, например:
const newLanguage = [
{
language: "English",
fluency: "Advanced",
read: true,
speak: true,
write: true,
},
{
language: "French",
fluency: "Intermediate",
read: false,
speak: false,
write: false,
}
]
Вот результат, который я пробовал:
var values = Object.entries(language).map(([k, v]) => ({[k]: v}))
И это результат:
[
{ fluency: { English: 'Advanced', French: 'Intermediate' } },
{ read: [ 'English', 'French' ] },
{ speak: [ 'English' ] },
{ write: [ 'English' ] }
]
P.S
Я не прошу код, но если бы кто-нибудь мог дать мне шаги для преобразования в результат, это было бы большой помощью!
Заранее спасибо!
Ответ №1:
Вы можете воспользоваться оператором распространения и отделить беглость от других свойств, а затем использовать .map()
для создания массива объектов на основе извлеченных значений беглости. Array.reduce можно использовать для создания объекта на основе свойств из rest
переменной:
const language = {
fluency: {
"English": "Advanced",
"French": "Intermediate"
},
read: ["English", "French"],
speak: ["English"],
write: ["English"]
};
let {
fluency,
...rest
} = language;
let result = Object.entries(fluency).map(([lang, flue]) =>
Object.keys(rest)
.reduce((obj, skill) => {
obj[skill] = rest[skill].includes(lang);
return obj;
}, {
language: lang,
fluency: flue
})
);
console.log(result);
Комментарии:
1. Спасибо за помощь! 🙂
Ответ №2:
Вы можете сделать что-то вроде приведенного ниже
const language = {
fluency: {
"English": "Advanced",
"French": "Intermediate"
},
read: ["English", "French"],
speak: ["English"],
write: ["English"]
};
const newLanguage = []
for (const [key, value] of Object.entries(language.fluency)) {
newLanguage.push({
language: key,
fluency: value,
read: language.read.includes(key),
speak: language.speak.includes(key),
write: language.write.includes(key),
});
}
console.log(newLanguage);
Комментарии:
1. Спасибо за помощь! 🙂