【问题标题】:Push one array to the end of another [duplicate]将一个数组推到另一个数组的末尾[重复]
【发布时间】:2020-09-07 00:58:06
【问题描述】:

我是 GAS 的新手。我有两个数组。 AR1 有 7 列和 16 行。 AR2 有 7 列和 4 行。我想将小数组 (AR2) 推到大数组 (AR1) 的底部,以便 AR1 有 7 列和 20 行。这是我的代码:

AR1.push(AR2);

当我通过将 AR1 的值设置到活动表 (sh) 中来检查是否有新数据时:

sh.getRange(1,1,AR1.length,AR1[0].length).setValues(AR1)

我收到一个错误: 例外:数据中的列数与范围内的列数不匹配。数据有 4,但范围有 7。 并且 AR1 在活动工作表中以未更改的形式写入,有 7 列和 16 行。

看起来 AR2 在推送命令中被转置和/或没有被推送到 AR1 的末尾,但我不明白为什么或如何修复它。非常感谢任何帮助。

【问题讨论】:

  • 谢谢马里奥斯 - 我在您的回复中标记了以下解决方案。
  • 谢谢鲁本 - 我看到了,是的,它有推动力。(...b),但我不确定前面的三个点,所以没有那样输入。效果很好。
  • 感谢@MikeB。很高兴它对你有用!

标签: javascript arrays google-apps-script


【解决方案1】:

修改点:

  • 我认为您的问题的原因是将二维数组推送到数组中。
    • 例如,假设以下二维数组使用push()进行合并。

        var ar1 = [["a1", "b1", "c1"],["a2", "b2", "c2"],["a3", "b3", "c3"]];
        var ar2 = [["a4", "b4", "c4"],["a5", "b5", "c5"]];
        ar1.push(ar2)
        console.log(ar1)
      
    • 结果如下。你可以看到ar2被添加到ar1。但这不能用于setValues(ar1)。这就是您的问题的直接原因。

        [
            ["a1","b1","c1"],
            ["a2","b2","c2"],
            ["a3","b3","c3"],
            [["a4","b4","c4"],["a5","b5","c5"]]
        ]
      

为了避免这个问题,我想提出以下修改。

修改脚本:

从:
AR1.push(AR2);
到:
AR1 = AR1.concat(AR2);

AR1 = [...AR1, ...AR2];

Array.prototype.push.apply(AR1, AR2);
  • 通过本次修改,当使用上述ar1ar2的样本值时,得到如下结果。通过这种修改,我认为您的sh.getRange(1,1,AR1.length,AR1[0].length).setValues(AR1) 脚本也可以工作。

      [
          ["a1","b1","c1"],
          ["a2","b2","c2"],
          ["a3","b3","c3"],
          ["a4","b4","c4"],
          ["a5","b5","c5"]
      ]
    

参考资料:

【讨论】:

    【解决方案2】:

    这应该可行:

    AR1.push(...AR2);
    

    参考资料:

    Spread Syntax

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 2014-02-04
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      相关资源
      最近更新 更多