JavaScript 属性重复 [点与括号]....

JavaScript property duplicates [dot vs bracket]…

本文关键字:属性 JavaScript      更新时间:2023-09-26

我有一个问题,我尝试计算组合。我尝试用 JavaScript 解决它,但有一些问题......不同集合的示例:

var colors    = ["Yellow", "Blue"];
var decisions = ["Yes", "No"];

作为第一步,我创建一个对象并尝试用两个数组填充它,并为每个组合初始化一个计数器:

var myObject = {};
for ( colorIndex in colors ) {
   myObject[colors[colorIndex]] = {};
   for ( decisionIndex in decisions ) {
      myObject[color][decisions[decisionIndex]] = 0;
   }
}

在下一步中,我尝试计算我得到的结果 - 示例:

var color = "Yellow";
var decision = "Yes";
myObject[color][decision] += 1;

调试(我尝试过的)

但是,我得到的结果是这样的:

Yellow: {Yes: 0, No: 0, Yes: NaN}

当我尝试调试正在发生的事情时,我观察到变量短代码如下:

myObject.Yellow.Yes    = 0
myObject.Yellow.No     = 0
myObject.Yellow["Yes"] = NaN

在这一点上,我不确定我是否遗漏了什么重要的东西,但你们中有谁知道发生了什么吗?我认为括号和点表示法应该是等效的,即使我不知道点表示法是如何在这里创建的,因为 YesNo 是字符串......

你能指出我一个方向吗?

感谢您阅读本文。

编辑:更改为forEach循环:

根据建议,我将循环更改为:

var myObject = {};
colors.forEach(function(color) {
   myObject[color] = {};
   decisions.forEach(function(decision) {
      myObject[color][decision] = 0;
   });
});

但是,问题仍然存在,我得到了NaN案例

我将您的代码修改为波纹管,并且工作正常,问题是您使用for in
的方式此外,您在应该for ( decision in decisions )for ( decisions in decision )上也有错误的代码

var colors    = ["Yellow", "Blue"];
var decisions = ["Yes", "No"];
var myObject = {};
for ( color in colors ) {
   myObject[colors[color]] = {};
   for ( decision in decisions ) {
      myObject[colors[color]][decisions[decision]] = 0;
   }
}
var color = "Yellow";
var decision = "Yes";
myObject[color][decision] += 1;

伙计,第二个循环中的拼写错误。你已经写了

decisions in decision

然而,它应该是

decision in decisions

一切都很好。

尝试

var myObject = {};
colors.forEach(function(color){
myObject[color] = {};
 decisions.forEach(function(decision){
   myObject[color][decision] = 0;
  })
})

由于颜色决策是数组,因此不应使用 for-in 进行循环访问

带字符串 - 隐藏换行符。

我继续阅读并在这里找到了这篇文章。

通过字符串化我的两个输入colordecision我注意到它们并不"相等",只是将其记录到控制台,事实证明其中一个有一个换行符('r)...

JSON.stringify(color)
> "'"Yellow"'"
JSON.stringify(decision)
> "'"Yes'r'""
我知道这一点,从我

问这个问题的方式中看不清楚,我的例子不允许你透露这一点。

我将做一些关于如何摆脱它的研究,但我认为它应该相当简单。

对不起,我的问题不是那么清楚,但我没想到这就是原因。非常感谢您的帮助。非常感谢!