【问题标题】:How to transform set of fields inside an objects in javascript and react如何在javascript中转换对象内的字段集并做出反应
【发布时间】:2021-05-16 13:22:06
【问题描述】:

我在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)转换为字符串列表(类型)的最佳方法是什么?强>.

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

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

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

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

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

  const newDataUser = {
    ...useData,
    programmingLanguage: resultTransformedField,
  };

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

感谢您的帮助。

【问题讨论】:

    标签: javascript reactjs algorithm react-native data-structures


    【解决方案1】:

    我会使用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);

    【讨论】:

    • 我看到越来越多的使用内置函数,它只不过是(obj, fn) => Object .fromEntries ( Object.entries (obj) .flatMap (([k, v]) => fn (k, v))),这里就是Object .rebuild (userData, (key, value) => [[key, properies.includes (key) ? val.split(', ') : val)]])。 (回调的结果数组允许拆分或过滤输入,而不仅仅是一对一的结果。)我认为至少是时候将它添加到 Ramda 中了。 For instance.
    猜你喜欢
    • 2014-04-12
    • 2021-05-12
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多