JavaScript属性重复[dot vs bracket] ...

时间:2016-03-13 07:17:08

标签: javascript

我有一个问题,我试图计算组合。我尝试用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

此时我不确定我是否遗弃了任何重要的事情,但是你们中的任何人都知道会发生什么事吗?我认为括号和点符号应该是等价的,即使我不知道如何在这里创建点符号,因为是字符串......

你能指出我的方向吗?

感谢您阅读本文。

编辑:更改为forEach-loop:

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

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

然而,问题仍然是我得到NaN - 案例

4 个答案:

答案 0 :(得分:2)

我修改你的代码如下,并且工作正常,问题在于你使用for in的方式 您for ( decisions in decision )上的代码也应该是for ( decision in decisions )

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;

答案 1 :(得分:1)

Dude,你的第二个循环中的拼写错误。你写过

decisions in decision

然而,它应该是

decision in decisions

一切都很好。

答案 2 :(得分:0)

尝试

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

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

答案 3 :(得分:0)

使用stringify - 隐藏换行符。

我继续阅读并找到this post here

通过对我的两个输入colordecision进行字符串化,我注意到它们不是等于"在某种程度上,他们似乎只是将其记录到控制台,事实证明其中一个在其中有一个换行符(\r)......

JSON.stringify(color)
> "\"Yellow"\"

JSON.stringify(decision)
> "\"Yes\r\""

我知道,从我提出问题的方式来看,这一点并不清楚,我的例子也不会让你透露这一点。

我将如何摆脱这种情况进行一些研究,但我认为应该相当简单。

抱歉,我的问题并不清楚,但我没想到这就是原因。非常感谢你的帮助。非常感谢!