我有一个函数:
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.
如何修改实际传递的参数?
注意事项:
- Google 表格脚本不支持新的 ECMA 标准 (
=>
) - 我需要能够在函数内传递任意数量的数组
filterArraysByKeyArray
最佳答案
由于您正在创建新 数组,因此您必须有办法将这些数组返回给调用代码。执行此操作的两种标准方法是:
使用返回值
使用可变对象
这是#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/