繁体   English   中英

如何在JavaScript中推入二维数组的第二维?

[英]How to push into the second dimension of a two dimensional array in JavaScript?

我有一个球员名单,表示为

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等)

根据您的评论,您需要一个更像这样的结构

var activeRange = [
    {
      name: 'mitch',
      otherData: [
        10,
        11,
        12, 
        13
      ]
    },
    {
      name: 'viper',
      otherData: [
        //values
      ]
    }
]

您可以通过activeRange[0].otherData[2]

要添加它,只需将其推入子数组activeRange[0].otherData.push(newValue)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM