【问题标题】:Make a nested loop for a JSON object in nodejs在 nodejs 中为 JSON 对象创建一个嵌套循环
【发布时间】:2020-12-10 23:48:33
【问题描述】:

您好,我是 React 和 nodejs 的新手。我从用户那里得到他对 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;
};
 

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

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

【问题讨论】:

  • 你的错误在这里:if (!isEmpty(preference.trim())) userPreferences.category_preference_name = preference; 应该像这样使用括号表示法:if (!isEmpty(preference.trim())) userPreferences[category_preference_name] = preference; 你不能使用点语法访问动态属性,你必须使用括号语法
  • 这能回答你的问题吗? Dynamically access object property using variable
  • 谢谢帮忙,我加个例子

标签: javascript node.js


【解决方案1】:

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

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

(在此处阅读更多信息:Dynamically access object property using variable)

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

将这两件事结合起来,您会得到想要的结果,正如您在这个 sn-p 中看到的那样。另外,对于以后的问题,我强烈建议您自己制作一个 sn-p。

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))

【讨论】:

  • 谢谢你的帮助和你的建议,你说得对,在嵌套时间我会使用 sn-p
猜你喜欢
  • 2018-12-29
  • 2017-02-07
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多