#javascript #arrays #functional-programming #concat
#javascript #массивы #функциональное программирование #конкатенация
Вопрос:
Как вы постоянно редактируете массив задач при использовании FP? Я понимаю, что когда вы используете методы массива, такие как .concat(), вы возвращаете копию массива, а не редактируете оригинал. Вот мой исходный код, который просто помещает новое задание в массив todo. Это навсегда изменяет переменную myTodos, чего мы пытаемся избежать.
let myTodos = []
function addTodo(newTodo) {
myTodos.push(newTodo)
return myTodos
}
Я переписал эту функцию как таковую:
const addTodo = (arr, todoText) => arr.concat(todoText)
Это работает просто отлично, но я не понимаю, как сохранить возвращаемое значение, когда я должен избегать глобальных переменных. Если я вызову это, чтобы добавить второе задание в свой список, оно вернет только это второе задание, поскольку var нигде не сохраняется. Я чувствую, что есть очень очевидный способ сделать это, но я просто не могу в этом разобраться.
Приношу свои извинения, я все еще новичок в мире программирования. Буду признателен за любую помощь.
Комментарии:
1. Э-э, нет, push и pop изменяют исходный массив
2. У вас буквально нет причин создавать метод-оболочку вокруг метода push, учитывая то, что вы делаете. Просто нажмите на свой массив
3. @Taplar — вероятно, домашнее задание — должно быть функциональным
4. Но это не функционально , потому что слишком сложно, 🙂
5. @Taplar — полностью согласен.
Ответ №1:
/*
1) how to avoid global variables?
2) how to not change the original?
3) how to keep the changed
#1 - this is called an Immediately Invoked Functional Expression (IIFE for short)
What this does is lets us create a "scope" within our script. Variables we
create inside it with `var` or `let` or `const`, are not global. They will
only exist inside the scope.
*/
(function(){
var originalArray = [];
// #2 - concat does not change the original array
// #3 - to keep the change, just store it in another variable
var changedArray = originalArray.concat('me');
// #3 - if I want to make more changes, I use the new variable
changedArray = changedArray.concat('yet another value');
console.log(originalArray);
console.log(changedArray);
}());
Комментарии:
1. Спасибо! Это именно то, что я искал. У меня создалось впечатление, что использование новой переменной для хранения массива было нечистым.