【发布时间】:2019-09-15 21:03:05
【问题描述】:
我的数据是一个带有键值对的对象,然后是一些带有字符串的数组(“skill_1”和“skill_2”):
const HeroDescriptions = [
{
id: "ana",
name: "Ana",
role: "Support",
skill_1: [
"Biotic Rifle",
"Damage: 70",
"Healing: 75"
],
skill_2: [
"Biotic Grenade",
"Damage: 60",
"Healing: 100"
]
}
]
我这样输出到 JSX:
const content = description.map(item => (
<div key={item.id}>
<h1>{item.name}</h1>
<h2>Role: {item.role}</h2>
<hr />
<ul>
{description[0].skill_1.map((skill, index) => (
<li key={index}>{skill}</li>
))}
</ul>
</div>
));
return (
<div>
<ul>{content}</ul>
</div>
);
};
我想修改这个sn-p:
{description[0].skill_1.map((skill, index) => (
<li key={index}>{skill}</li>
我如何遍历所有嵌套的技能数组,以便我的代码可以重用并且可以工作,例如4阵有技能?
【问题讨论】:
-
尝试使用不同的数据格式:
{ "skills": [ { "name": "rifle", "damage": 70, "healing": 50 }, { "name": "knife", "damage": 15, "healing": 10 }] }会更有意义。然后你不必知道一个英雄在模板中有多少技能,你可以像 map() 描述一样 map() 技能。另一个优点是在计算射击时您不需要将“70 伤害”解析为整数。 -
您可以使用
Object.entries和Array.filter与正则表达式/^skill_.*/,最后当然是您的Array.map或者像@Shilly 指出的那样改变您的结构.. :)跨度> -
为什么不使用数组:
skills: [ [ "Biotic Rifle", "Damage: 70", "Healing: 75" ], [ "Biotic Grenade", "Damage: 60", "Healing: 100" ] ] -
如果技能是具有键值对而不是数组的对象,方法将如何改变?我尝试遵循@Shilly 的方法,但每个角色的技能可能不同。例如。治疗并不总是可用的。我想知道即使不同英雄的键不同,是否可以映射所有技能
-
守望先锋中无法使用任何技能治疗的角色,所有技能的治疗量为 0。关键是治疗应该是技能对象的属性,即使它是零。在所有内容上都有一个固定的键列表,即使它们的值是 0 或 null 或未定义,这意味着您可以对这些属性进行硬编码,而不必使用
Object.keys()之类的东西来检查对象上是否有可用的键。所以那么“映射所有技能,即使它们具有不同的键”的问题不再存在,因为所有东西都有相同的键,只是具有不同的值。
标签: javascript arrays reactjs jsx