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

我从用户那里获取他对 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;

};

 

输出将是: 一个具有所有首选项属性及其值的对象。


我正在寻找带有嵌套循环的示例,但找不到。


幕布斯7119047
浏览 98回答 1
1回答

吃鸡游戏

您需要在代码中修复一些问题。首先,当使用变量名作为从对象中提取的键时, 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))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript