0

所以我有一段这样的代码:

this.convertParametersToGroups = function (nodes) {

        self.selectedParametersGroup([]);
        var emptyParametersList = [];

        var pos = 0;
        var group;
        var tempParametersGroup = [];         
                            // tempParametersGroup: Array[1]
                            // 0: undefined   

        $.each(nodes, function (key, val) {
            emptyParametersList.push(0);
            group = self.convertNodeToParameterGroup(val);
            group.position = pos;
            tempParametersGroup.push(group);
            pos++;
        });

        self.selectedParametersGroup(tempParametersGroup);

        return emptyParametersList;
    };

当我重新排序声明时,注释结果不会改变。当我在 $.each 循环中有“组”时,它在第一次迭代中插入了一个未定义的值,然后执行回调中的第一条语句。

但是,当我像这样更改他们的名字时:

this.convertParametersToGroups = function (nodes) {

        self.selectedParametersGroup([]);
        var emptyParametersList = [];

        var pos = 0;
        var g;
        var tempParametersGr = [];         
                            // tempParametersGr: Array[0]

        $.each(nodes, function (key, val) {
            emptyParametersList.push(0);
            g = self.convertNodeToParameterGroup(val);
            g.position = pos;
            tempParametersGr.push(g);
            pos++;
        });

        self.selectedParametersGroup(tempParametersGr);

        return emptyParametersList;
    };

它在评论中工作。似乎javascript以某种方式将“组”名称映射到数组的“组”后缀并插入它或强制长度增加。我是否缺少某些已知的语言功能或...?

4

1 回答 1

0

你可以尝试这样调试,应该很清楚 undefined 是什么时候真正添加到数组中的:

function makeClone( arr ) {
    return JSON.parse( JSON.stringify( arr ) );
}

this.convertParametersToGroups = function (nodes) {

        self.selectedParametersGroup([]);
        var emptyParametersList = [];

        var pos = 0;
        var group;
        var tempParametersGroup = [];

        console.log( "before loop", makeClone( tempParametersGroup ) );


        $.each(nodes, function (key, val) {
            console.log( "before iteration", key, makeClone( tempParametersGroup ) );
            emptyParametersList.push(0);
            group = self.convertNodeToParameterGroup(val);
            group.position = pos;
            tempParametersGroup.push(group);
            pos++;
            console.log( "after iteration", key, makeClone( tempParametersGroup ) );
        });

        console.log( "after loop", makeClone( tempParametersGroup ) );

        self.selectedParametersGroup(tempParametersGroup);

        return emptyParametersList;
    };
于 2012-05-30T11:00:38.380 回答