【问题标题】:I'm trying to convert Object to Array of object in javascript我正在尝试将对象转换为javascript中的对象数组
【发布时间】:2021-02-03 06:35:02
【问题描述】:

这是一个对象:

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

附言 我不是要代码,但是如果有人可以给我一个转换为结果的步骤,那将是一个很大的帮助! 提前致谢!

【问题讨论】:

    标签: javascript arrays dictionary object ecmascript-6


    【解决方案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);

    【讨论】:

    • 感谢您的帮助! :)
    【解决方案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);

    【讨论】:

    • 感谢您的帮助! :)
    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2019-10-22
    • 2018-01-24
    • 1970-01-01
    • 2021-09-09
    • 2018-08-21
    • 1970-01-01
    相关资源
    最近更新 更多