循环执行函数并将结果存储为列表

我有以下的函数,它可以在 Splash 中点击复选框:

local get_dimensions = splash:jsfunc([[
        function () {
            for i=1, 5 do
            var rect = document.querySelector(string.format('checkbox[number="%d"]'), i)
            .getClientRects()[0];
            return {[rect.left]: rect.top};
    end
        }
    ]])

但是,我无法像 rect 那样将循环中的列表存储到单个变量中,那么如何将列表存储到变量中,并且当我返回它时,它应该返回一系列的值?

类似于 Python 中的方法,即:

def stuff():
    rect = []
    for i in range(5):
        rect.append([...])
    return rect

原文链接 https://stackoverflow.com/questions/70501034

点赞
stackoverflow用户2858170
stackoverflow用户2858170

让我们来看看你的代码。

你调用了 splash:jsfunc。该函数可将 JavaScript 转换为可调用的 Lua 函数。它接受一个参数,即定义 JavaScript 函数的字符串。

yourString = [[
  function () {
    for i=1, 5 do
      var rect = document.querySelector(string.format('checkbox[number="%d"]'), i).getClientRects()[0];
      return {[rect.left]: rect.top};
    end
  }
]]

这看起来像是 Lua 和 JavaScript 的奇怪混合。

这是 JavaScript 的 for 循环:

for (let i = 0; i < 10; i++) {
  // some code
}

这是 Lua 数值型 for 循环:

另外,在没有任何条件的循环中使用 return 有什么意义?这将在 i = 1 的第一次循环后执行。这可能不是你想要的。

因此,修复循环以使其成为 JavaScript。创建对象或数组,并在循环完成后返回它。

2021-12-28 14:07:40