Неизменность данных является краеугольным камнем функционального программирования, и в целом я сделаю то, что вы пытаетесь сделать: клонировать данные и мутировать клон. Следующая функция принимает массив и серию подмассивов. Подмассивы состоят из [startIndex, quantity]
. Он клонирует исходный массив с помощью оператора распространения и склеивает клон в соответствии со вторым параметром (...cutDeep
). Он вернет объект с исходным массивом и клонированным массивом. Если вы заключите все в функцию, то ваша область будет защищать каждый возврат. Замечание о последующих поворотах Второй клон (secondResult.dissected
) объединяется еще раз, и последний журнал подтверждает, что исходный массив никогда не мутировал.
Демо
const data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f'];
const dissect = (array, ...cutDeep) => {
let clone = [...array];
for (let [cut, deep] of cutDeep) {
clone.splice(cut, deep);
}
return {
original: array,
dissected: clone
};
}
const firstResult = dissect(data, [2, 3], [5, 2], [9, 1]);
const secondResult = dissect(data, [3, 2], [10, 1]);
console.log(JSON.stringify(firstResult));
console.log(JSON.stringify(secondResult));
console.log(JSON.stringify(dissect(secondResult.dissected, [0, 2], [5, 1])));
console.log(JSON.stringify(data));