我的球员名单以

activeRange[x]


其中x每天都会变化。

x值中的每一个都必须至少有4个后续值(可能更多)。理想情况下,我希望数组看起来像:

activeRange[x][y]


因此,这是我到目前为止所做的:

var MATCH = AllData[TotalRows][TotalColumns+1];
activeRange[TotNumPlayers].push(MATCH);


这些全部位于3个嵌套的for循环内。

TotNumPlayers


将迭代开头声明的给定集合(有点像23)。完成后,

TotalRows


会迭代,然后最终

TotalColumns


我遇到以下错误:

TypeError: Cannot find function push in object mitch


mitch是activeRange [0]的值。我一直在盯着这种方式太久了,所以我们将不胜感激!

编辑:在下面插入代码:
请忽略所有评论。我复制/粘贴了昨天使用的部分代码以执行不同的功能。
这是我第二次在该网站上发布内容,因此尝试将这个怪物格式化为漂亮的声音听起来很吓人。希望这足够好。

这就是activeRange的声明和初始化方式。

var activeRange = new Array();
for (var b=0; b<=lastRow-2; b++){
    activeRange[b] = sheetRANK.getRange(b+2,1).getValue();
}


这就是功能。

function getTotalScore(activeRange, w) {
    Logger.clear()
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheetWAR = ss.getSheetByName('WAR');
    var sheetRANK = ss.getSheetByName('RANK');

    var AllData = sheetRANK.getDataRange().getValues();
    Logger.log('First');
    for (var TotNumPlayers = 0; TotNumPlayers <= activeRange.length; TotNumPlayers++) {
        Logger.log('Second');
        var f = 0;
        for (var TotalColumns = 0; TotalColumns <= AllData[0].length; ++TotalColumns) { // Init n. If n <= the total columns (second dimension), inc n.
            Logger.log('Third');
            for (var TotalRows = 0; TotalRows <= AllData.length; ++TotalRows) { // Init i. If i <= the total rows (first dimension), inc i.
                Logger.log('Fourth');
                //try{ // to avoid errors.
                if (activeRange[TotNumPlayers] != "") {
                    Logger.log('Here?');
                    if (AllData[TotalRows][TotalColumns].valueOf().toUpperCase() == activeRange[TotNumPlayers].toUpperCase()) {
                        Logger.log('How About Here?');
                        var MATCH = AllData[TotalRows][TotalColumns + 1];
                        activeRange.push(TotNumPlayers, MATCH);
                        for (var Calc = 0; Calc <= activeRange[TotNumPlayers].length - 1; Calc++) {
                            var OverallScore = ((activeRange[TotNumPlayers][0] * 1.0) + (activeRange[TotNumPlayers][1] * .75) + (activeRange[TotNumPlayers][2] * .50) + (activeRange[TotNumPlayers][3] * .25));
                            sheetRANK.getRange(activeRange[TotNumPlayers] + 1, 2).setValue(OverallScore);

                            f = f + 1;
                        }
                        if (TotalRows == AllData.length - 1 && TotalColumns == AllData[0].length - 1 && f == 0) {
                            Browser.msgBox('No names matching \'' + activeRange[TotNumPlayers] + '\' found. Check your spelling!');
                            return;
                        }
                    }
                }
            }
        }
    }
}

最佳答案

尝试考虑可以使用哪种数据结构来简化生活。对于这种特殊情况,您具有要与之关联某些数据的玩家列表。您可能会使用类似以下的结构:

activeRange = [
  {
    name: 'mitch',
    data: []
  }
]


当您想更新数据时,只需调用activeRange[0].data.push(someData)

activeRange是一组播放器,每个播放器由具有某些属性(名称,数据等)的对象表示。
调用activeRange[0]将产生数组中的第一个播放器,而activeRange[0].data将产生与该播放器关联的数据,然后您可以根据需要进行操作(pushpop等)

关于javascript - 如何在JavaScript中插入二维数组的第二维?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32676084/

10-10 00:27