我有一个功能:
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;
}
这个想法是通过键数组修改数组。我的测试功能是:
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]
}
我得到了原始数组。我用Google搜索了一下,然后发现:
对参数的更改在函数外部不可见(反映)。
如何修改实际传递的参数?
注意:
=>
)filterArraysByKeyArray
答案 0 :(得分:1)
由于您正在创建新的数组,因此您必须有办法将这些数组提供给调用代码。这样做的两种标准方法是:
使用返回值
使用可变对象
在这里#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();
&#13;
这里#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();
&#13;