我正在制作一个javascript神经网络,并试图使用for循环将一些条目放入对象中,但我没有得到我想要的结果。我希望能够得到一个物体看起来像:
{0 : {neuron1Sum : null}}
我想循环它来创建多个神经元和层。一旦看到代码,可能会更容易理解。
hiddenLayers : function() {
for(var i = 0; i < arguments.length; i++) {
numberOfNeurons = arguments[i];
hiddenLayer = {};
for (var j = 0; j < numberOfNeurons - 1; j++) {
hiddenLayer[i] = ["neuron" + j + "Sum"];
hiddenLayer[i]["neuron" + j + "Sum"] = null;
}
}
},
您的hiddenLayer
应定义为数组,hiddenLayer[i]
应定义为对象。然后像这样把每个元素放到对象中。
hiddenLayers : function() {
var hiddenLayer = []; // defined as array
for(var i = 0; i < arguments.length; i++) {
numberOfNeurons = arguments[i];
hiddenLayer[i] = {}; //defined as object
for (var j = 0; j < numberOfNeurons - 1; j++) {
hiddenLayer[i]["neuron" + j + "Sum"] = null;
}
}
return hiddenLayer;
/*
will return something like :
[
0 : {neuron1Sum : null, neuron2Sum : null},
1 : {neuron1Sum : null, neuron2Sum : null}
]
*/
},
看起来您需要在内部循环之前移动几个标识符并初始化数组
// ...
hiddenLayers: function() {
var numberOfNeurons,
hiddenLayer = [], // keep this across all the loops
temp, // to store objects as we make them
i, j;
for (i = 0; i < arguments.length; ++i) {
numberOfNeurons = arguments[i];
hiddenLayer[i] = []; // remember to initialise
for (j = 0; j < numberOfNeurons - 1; ++j) {
temp = {};
temp["neuron" + j + "Sum"] = null;
hiddenLayer[i].push(temp);
}
}
return hiddenLayer; // remember to return
},
// ...
这个代码现在产生类似的东西
[
[
{neuron0Sum: null},
{neuron1Sum: null}
],
[
{neuron0Sum: null},
{neuron1Sum: null}
]
]
从ES6开始,我们将能够在对象文字的属性名称中使用表达式,例如
{
["foo" + "bar"]: "baz"
}
// produces
{
"foobar": "baz"
}
如果您希望您的代码现在就可以在生产中使用,请不要使用此功能(可能在一两年后)
我不认为代码在做你想要的事情,但我不确定你想要什么。。
此任务:
hiddenLayer[i] = ["neuron" + j + "Sum"];
将CCD_ 3设置为包含单个字符串的数组。它相当于:
hiddenLayer[i] = [];
hiddenLayer[i][0] = "neuron" + j + "Sum";
然后这个任务:
hiddenLayer[i]["neuron" + j + "Sum"] = null;
将hiddenLayer[i]
视为通用对象(关联数组、映射、哈希、字典),并将命名属性(与该字符串同名)设置为null
。因此,如果i
为0,j
为0,则得到如下对象:
{
0: "neuron0Sum",
neuron0Sum: null
}
我怀疑这不是你想要实现的。。。