未从for循环获得预期结果



我正在制作一个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
}

我怀疑这不是你想要实现的。。。

最新更新