У меня есть функция:
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]
}
В результате я получаю исходные массивы. Я искал это и узнал:
Изменения в аргументах не отображаются (отражаются) вне функции.
Как изменить фактические переданные аргументы?
Заметки:
=>
)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();