Функциональное программирование становится нормой, и сейчас вокруг него большой ажиотаж.

Поскольку я в основном использовал это с редуксом, чтобы убедиться, что мои редукторы работают правильно, эта функция будет полезна для всех, кому нужны некоторые функциональные функции javascript.

Ниже я покажу несколько примеров некоторых простых действий, которые мы используем, таких как: вставить в массив, удалить из массива, обновить элемент в массиве и обновить объект.

Первое действие будет мутирующим, а остальные — функциональными, не мутирующими.

Отправить в массив

//******** this mutates original list !!!!!!! *******
const simplePush = (list, item) => {
 list.push(item);
 return list;
};
const concatPush = (list, item) => {
 return list.concat([item]);
};
const es6Push = (list, item) => {
 return […list, item];
};

Удалить из массива

//******** this mutates original list !!!!!!! *******
const simpleRemove = (list, index) => {
 list.splice(index, 1);
 return list;
};
const sliceRemove = (list, index) => {
 return list
 .slice(list, index)
 .concat(list.slice(index+1));
};
const es6Remove = (list, index) => {
 return [
 …list.slice(0, index),
 …list.slice(index + 1)
 ];
};

Обновить элемент массива

//******** this mutates original list !!!!!!! *******
const simpleUpdate = (list, index, value) => {
 list[index] = value;
 return list;
};
const sliceUpdate = (list, index, value) => {
 return list
 .slice(list, index)
 .concat([value])
 .concat(list.slice(index+1));
};
const es6Update = (list, index, value) => {
 return [
 …list.slice(0, index),
 value,
 …list.slice(index + 1)
 ];
};

Обновить значение объекта

//******** this mutates original list !!!!!!! *******
const simpleUpdate = (obj, key, val) => {
 obj[key] = val;
 return obj;
};
const assignUpdate = (obj, key, val) => {
 let updateObj = {};
 updateObj[key] = val;
 return Object.assign({}, obj, updateObj);
};

Если вам понравилось или вы сочли это полезным, добавьте в закладки и лайкните :) и, конечно же, подпишитесь на меня и посетите мой блог