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

Joh*_*n D 0 javascript algorithm data-structures reactjs react-native

我有以下对象React

const userData = 
  {
    id: 30,
    firstName: "James",
    lastName: "Anderson",
    programmingLanguage: "Java, Python",              # HERE
    LanguageSpoken: "French, German, English",        # HERE
    Nationality: "French",
    Hobby: "Developer, Hiking"                        # HERE
  },
]
Run Code Online (Sandbox Code Playgroud)

什么是循环的最佳方式,通过这个对象,改造3个字段programmingLanguage LanguageSpoken 并且Hobby ,其类型string字符串列表(类型)

所以改造后应该是这个样子。

const userData = 
  {
    id: 30,
    firstName: "James",
    lastName: "Anderson",
    programmingLanguage: ["Java", "Python"],         # List of strings
    LanguageSpoken: ["French", "German", "English"], # List of strings
    Nationality: "French",
    Hobby: ["Developer", "Hiking"]                   # List of strings         
  },
]
Run Code Online (Sandbox Code Playgroud)

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

如果是针对单个领域,我会这样做:

  const transformedField = userData.programmingLanguage.toString().split(",");
  const resultTransformedField = transformedField.map((i) => Number(i));

  const newDataUser = {
    ...useData,
    programmingLanguage: resultTransformedField,
  };
Run Code Online (Sandbox Code Playgroud)

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

感谢您的帮助。

Cer*_*nce 5

我会将每个对象映射到一个新对象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);
Run Code Online (Sandbox Code Playgroud)