简体   繁体   English

我正在尝试在 javascript 中将对象转换为对象数组

[英]I'm trying to convert Object to Array of object in javascript

Here is the one object:这是一个对象:

const language = {
  fluency: {
    "English": "Advanced",
    "French": "Intermediate"
  },
  read: ["English", "French"],
  speak: ["English"],
  write: ["English"]
};

And I'm trying transform into array of object like:我正在尝试转换为对象数组,例如:

const newLanguage = [
    {
        language: "English",
        fluency: "Advanced",
        read: true,
        speak: true,
        write: true,
    },
    {
        language: "French",
        fluency: "Intermediate",
        read: false,
        speak: false,
        write: false,
    }
]

Here is the result what I have tried:这是我尝试过的结果:

var values = Object.entries(language).map(([k, v]) => ({[k]: v}))

And it's result is:它的结果是:

[
  { fluency: { English: 'Advanced', French: 'Intermediate' } },
  { read: [ 'English', 'French' ] },
  { speak: [ 'English' ] },
  { write: [ 'English' ] }
]

PS I'm not asking for the code, but if any one could give me a steps to transform into a result would be a great help! PS我不是要代码,但如果有人能给我一个步骤来转换成结果,那将是一个很大的帮助! Thanks in advance!提前致谢!

You can take advantage of the spread operator and separate fluency from other properties and then use .map() to build an array of objects based on extracted fluency values.您可以利用扩展运算符并将流畅度与其他属性分开,然后使用.map()根据提取的流畅度值构建对象数组。 Array.reduce can be used to build an object based on the properties from rest variable: 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);

You can do something like below您可以执行以下操作

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM