为了账号安全,请及时绑定邮箱和手机立即绑定

在nodejs中为JSON对象创建嵌套循环

在nodejs中为JSON对象创建嵌套循环

幕布斯7119047 2023-11-02 22:32:27
我从用户那里获取他对 json 代码中某些类别的偏好,例如:{    "sport" : {        "tennis": "5",        "running": "4",        "swimming": "5"    },    "study" : {        "history" : "0"    } }我希望为每个首选项在“userPreferences”对象中创建自己的字段。这是我写下的代码,但我看不出这里的错误是什么exports.reduceUserPreferences = (data) => {  let userPreferences = {};  data.forEach(category => {    category.forEach(preference => {      category_preference_name = category.string + "_" + preference.string;      if (!isEmpty(preference.trim())) userPreferences.category_preference_name = preference;    });  });   //if (!isEmpty(data.tennis.trim())) userPreferences.sport_tennis = data.tennis;  //if (!isEmpty(data.swimming.trim())) userPreferences.sport_swimming = data.swimming;  //if (!isEmpty(data.running.trim())) userPreferences.sport_running = data.running;  //if (!isEmpty(data.history.trim())) userPreferences.study_history = data.history;   return userPreferences;}; 我希望“”对象具有所有首选项的字段以及它们所属的类别。我不明白我做错了什么,我在这段代码上徘徊了几个小时。添加示例我有另一个与这个函数类似的函数,输入相似,输出相似。例如输入:{    "bio": "hello there",    "website": "",    "location": "los angles"}示例函数:exports.reduceUserDetails = (data) => {  let userDetails = {};   if (!isEmpty(data.bio.trim())) userDetails.bio = data.bio;  if (!isEmpty(data.website.trim())) {    // https://website.com    if (data.website.trim().substring(0, 4) !== 'http') {      userDetails.website = `http://${data.website.trim()}`;    } else userDetails.website = data.website;  }  if (!isEmpty(data.location.trim())) userDetails.location = data.location;   return userDetails;}; 输出将是: 一个具有所有首选项属性及其值的对象。我正在寻找带有嵌套循环的示例,但找不到。
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您需要在代码中修复一些问题。

首先,当使用变量名作为从对象中提取的键时, user obj[varName],而不是obj.varName


另外,您正在尝试循环一个对象,而不是一个数组。要循环遍历按键,请使用Object.keys()

将这两件事结合起来,您将获得所需的结果,正如您在这段代码中看到的那样。另外,对于将来的问题,我强烈建议您自己制作一个片段。

const jsonOriginal = {

    "sport" : {

        "tennis": "5",

        "running": "4",

        "swimming": "5"

    },

    "study" : {

        "history" : "0"

    } 

}


const reduceUserPreferences = (data) => {

  let userPreferences = {};

  Object.keys(data).forEach(category => {

    Object.keys(data[category]).forEach(preference => {

      category_preference_name = category + "_" + preference;

      const preferenceValue = data[category][preference].trim();

      if (preferenceValue !== '') userPreferences[category_preference_name] = preferenceValue;

    });

  });

 

  return userPreferences;

};


console.log(reduceUserPreferences(jsonOriginal))


查看完整回答
反对 回复 2023-11-02
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信