Функция для записи данных в массив

194
03 февраля 2020, 20:40

Столкнулся с такой проблемой. У меня есть функция (для вопроса упростил ее очень сильно):

var participantsQuarterFinal = [];
var participantsSemiFinal = [];
var filterNextStage = []; (после кое каких действий в нем появляется 3 объекта).
var distribution = function (array) {
 array = filterNextStage.slice(0, 1);
 дальше идут манипуляции с array.
}

Я хотел сделать так, чтобы я мог вызывать функцию distribution и передавать ей аргументом название любого массива (как пример participantsQuarterFinal или participantsSemiFinal) и чтобы туда записывались данные:

array = filterNextStage.slice(0, 1);

Но в итоге при запуске

distribution(participantsQuarterFinal);

Ничего никуда не записывается. Массив participantsQuarterFinal остается пустым. Я решил проверить и оказалось, что если вместо параметра array сразу написать название массива, то запись происходит. Но мне нужно, чтобы я смог передавать название любого массива. Что делать? Попрошу Вас отвечать мне в довольно понятной форме, так как с JS только начинаю знакомиться. Спасибо за ответы!

Answer 1

var distribution = function (array) { 
 array.splice(0, array.length, ...filterNextStage.slice(0, 2)); 
 //дальше идут манипуляции с array. 
} 
 
var a1 = [1,2,3,4]; 
var filterNextStage = ["a", "b", "c"]; 
console.log("before", JSON.stringify(a1)); 
distribution(a1); 
console.log("after", JSON.stringify(a1));

Answer 2

Выяснил, что если передавать в качестве параметра название массива, куда записывать, то работать не будет, так как переменная внутри функции (параметр) это локальная область видимости. Поэтому стоит сделать вот так:

var participantsQuarterFinal = [];
var filterNextStage = [{}, {}, {}];
var distribution = function () {
 return filterNextStage.slice(0, 1);
}
participantsQuarterFinal = distribution ();

Возможно, очень криво написал вопрос, извиняюсь. Спасибо тем, кто ответил!

Answer 3
// Пустой массив
let z = [];

//Функция с двумя агрументами, первый аргумент название массива, второй аргумент то что надо добавить в массив
function pushIn (arr, someting) {
    arr.push(someting);
}

//проверяем
pushIn(z, 'Book');
console.log(z);
READ ALSO
Как правильно прочитать данный код var args = Array.prototype.slice.call(arguments); [дубликат]

Как правильно прочитать данный код var args = Array.prototype.slice.call(arguments); [дубликат]

Не могу связать воедино разрозненные (возможно поверхностные знания), помогите пожалуйста!

179
Общий JS в 2ух компонентах Vue.js подменяет template и style

Общий JS в 2ух компонентах Vue.js подменяет template и style

У меня есть 2 слайдера, которые отличаются друг от друга template и style, а script у обоих одинаковыйЯ вынес js в отдельный файл и подключаю через src

190
передача данных и построение DOM

передача данных и построение DOM

В angularjs передаю данные между контроллерамиНо не могу ее использовать

186