如何在javascript中转换对象内的一组字段并做出反应

问题描述

我在 #include <boost/optional.hpp> #include <boost/variant.hpp> #include <optional> struct A {}; struct B { B(A) {} }; void f() { boost::optional<A> boptA; boost::optional<B> boptB{boptA}; std::optional<A> soptA; std::optional<B> soptB{soptA}; { boost::optional<boost::variant<B>> vB; vB = boptA; // 1. success } { boost::optional<boost::variant<B,bool>> vB; vB = boptA; // 2. success } { std::optional<boost::variant<B>> vB; vB = soptA; // 3. success that compares with #1 } { std::optional<boost::variant<B,bool>> vB; vB = soptA; // 4. compilation error that should have compared with #2 } } 中有以下对象:

React

循环遍历此对象并将 const userData = { id: 30,firstName: "James",lastName: "Anderson",programmingLanguage: "Java,Python",# HERE LanguageSpoken: "french,German,English",# HERE Nationality: "french",Hobby: "Developer,Hiking" # HERE },] programmingLanguage LanguageSpoken 三个字段(类型为 Hobby )转换为 的最佳方法是什么?字符串列表(类型)

所以转换后应该是这样的。

string

PS:(我知道这很糟糕)但上面的格式是我从后端接收数据的方式,因为我不允许更改,所以我必须处理它。

如果是针对单个字段,我会这样做:

const userData = 
  {
    id: 30,programmingLanguage: ["Java","Python"],# List of strings
    LanguageSpoken: ["french","German","English"],# List of strings
    Nationality: "french",Hobby: ["Developer","Hiking"]                   # List of strings         
  },]

但如上所述,我必须修改 3 个字段。

感谢您的帮助。

解决方法

我会使用 Object.fromEntries 将每个对象映射到一个新对象:

const properties = ['programmingLanguage','LanguageSpoken','Hobby'];

const userData = [
  {
    id: 30,firstName: "James",lastName: "Anderson",programmingLanguage: "Java,Python",LanguageSpoken: "French,German,English",Nationality: "French",Hobby: "Developer,Hiking"
  },];

const output = userData.map(
  obj => Object.fromEntries(
    Object.entries(obj).map(
      ([key,val]) => [key,properties.includes(key) ? val.split(',') : val]
    )
  )
);
console.log(output);