【发布时间】: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;你不能使用点语法访问动态属性,你必须使用括号语法 -
谢谢帮忙,我加个例子
标签: javascript node.js