我有一个对象menuNames
,它应该维护一个菜单项列表。如果menuNames
已经有slug
,请增加该值,如果它不包含slug
,请将值设置为1
。我这样做是为了跟踪唯一的名字。我想最终得到类似的东西:
menuNames: {
home: 1,
products: 10,
contact: 1
}
这不起作用(这将包含在通过每个slug的循环中):
menuNames[slug] = (menuNames.hasOwnProperty(slug) ? menuNames[slug]++ : 1);
//this sets every value to 1
但这确实有效(这将包含在每个slug的循环中):
if(menuNames.hasOwnProperty(slug)) {
menuNames[slug]++;
} else {
menuNames[slug] = 1;
}
答案 0 :(得分:6)
menuNames[slug]++
会增加该值,但也会返回原始值。
您正在执行menuNames[slug] =
,因此在递增后,该值将重新设置为原始值。
要修复它,只需执行以下操作:
menuNames[slug] = (menuNames.hasOwnProperty(slug) ? menuNames[slug]+1 : 1);
或者:
(menuNames.hasOwnProperty(slug) ? menuNames[slug]++ : menuNames[slug] = 1);
答案 1 :(得分:3)
我想它可以这样工作:
menuNames[slug] = (menuNames.hasOwnProperty(slug) ? ++menuNames[slug] : 1);
答案 2 :(得分:2)
正如其他答案所说,问题在于后期增量。
另一种写作方式是:
menuNames[slug] += (some_bool ? 1 : 0);
++
非常对错误很敏感。尝试将其写为+=
语句。
如果menuNames[slug]
未定义,请将其写为:
menuNames[slug] = 0;
if (some_bool) {
menuNames[slug] += 1;
}
这是(在我看来)编写初始化/计数器循环的最清晰的方法。
如果您喜欢单行,那么您会感到畏缩,但如果您喜欢无错误的代码,您会很高兴看到这一点。