javascript - 使参数的更改在函数外部可见(反射(reflect))

标签 javascript arrays google-apps-script

我有一个函数:

function filterArraysByKeyArray(key, value)
{
  function check(elt, i) { return value === key[i]; }    
  for (var i = 2, l = arguments.length; i < l; i++) 
  { 
    arguments[i] = arguments[i].filter(check); 
  }
  return 0;
}

思路是通过key数组修改数组。我的测试函数是:

function test_filterArraysByKeyArray()
{
  var key = [1, 0, 1];
  var value = 1;
  var arr1 = ['M', 'not M', 'L'];
  var arr2 = ['Star Wars', 'booo', 'Stat Trek'];

  filterArraysByKeyArray(key, value, arr1, arr2);

  Logger.log(arr1); // [M, not M, L]
  Logger.log(arr2); // [Star Wars, booo, Stat Trek]
}

结果我得到了 origins 数组。我已经用谷歌搜索并发现:

Changes to arguments are not visible (reflected) outside the function.

如何修改实际传递的参数?

注意事项:

  1. Google 表格脚本不支持新的 ECMA 标准 (=>)
  2. 我需要能够在函数内传递任意数量的数组 filterArraysByKeyArray

最佳答案

由于您正在创建 数组,因此您必须有办法将这些数组返回给调用代码。执行此操作的两种标准方法是:

  1. 使用返回值

  2. 使用可变对象

这是#1,我们返回数组的数组:

function filterArraysByKeyArray(key, value)
{
  var result = [];
  function check(elt, i) { return value === key[i]; }    
  for (var i = 2, l = arguments.length; i < l; ++i)
  { 
    result.push(arguments[i].filter(check)); 
  }
  return result;
}

function test_filterArraysByKeyArray()
{
  var key = [1, 0, 1];
  var value = 1;
  var arr1 = ['M', 'not M', 'L'];
  var arr2 = ['Star Wars', 'booo', 'Stat Trek'];

  var arrays = filterArraysByKeyArray(key, value, arr1, arr2);
  arr1 = arrays[0];
  arr1 = arrays[1];

  console.log(arrays[0]);
  console.log(arrays[1]);
}

test_filterArraysByKeyArray();

这是#2,使用数组(数组是可变对象):

function filterArraysByKeyArray(key, value, arrays)
{
  function check(elt, i) { return value === key[i]; }    
  for (var i = 0, l = arrays.length; i < l; ++i)
  { 
    arrays[i] = arrays[i].filter(check); 
  }
  return 0;
}

function test_filterArraysByKeyArray()
{
  var key = [1, 0, 1];
  var value = 1;
  var arrays = [
    ['M', 'not M', 'L'],
    ['Star Wars', 'booo', 'Stat Trek']
  ];

  filterArraysByKeyArray(key, value, arrays);

  console.log(arrays[0]);
  console.log(arrays[1]);
}

test_filterArraysByKeyArray();

关于javascript - 使参数的更改在函数外部可见(反射(reflect)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47607583/

相关文章:

javascript - 如何在mongodb中查找数组中的元素?

javascript - 我正在 React 创建一个聊天机器人我需要它的一些特定回复而不是单个关键字匹配

javascript - PHP 与 JavaScript : Altering the value of an array passed in gives different results

google-apps-script - Google Spreadsheet Form,根据电子表格填充表单选项

javascript - 如何将 javascript 中的当前 Alert() 替换为 jQuery 警报对话框插件

javascript - 将 jquery 添加到 React 入门工具包

javascript - 在 Chrome 控制台中禁用 URL 缩短/格式设置

Java - 如何从句子的ArrayList中获取每个单词

javascript - 将表单数据收集到 Google 表格时遇到更多麻烦

javascript - 使用 Apps Script API 的 Chrome 应用