Как запретить мутирование основного массива js
как сделать, чтобы основной массив store не мутировал?
function bubbleSort(stats) {
for (let i = 0; i < stats.length - 1; i++) {
const tmp = stats[i];
if (stats[i].size > stats[i + 1].size) {
stats[i] = stats[i + 1];
stats[i + 1] = tmp;
}
}
return stats;
}
function generateData(arr, order) {
let stats = [];
let assignment = [];
let newArr = [];
for(let i = 0; i< arr.length; i++) {
newArr.push(arr[i])
}
order.filter((orderItem) => {
newArr.map((sizeItem, index) => {
const isAvaibleAssigment = assignment.find((assignteItem) => assignteItem.id === orderItem.id);
if (isAvaibleAssigment) {
return sizeItem;
}
if (orderItem.size.includes(sizeItem.size)) {
if (sizeItem.quantity === 0) {
return sizeItem;
}
assignment.push({
id: orderItem.id,
size: sizeItem.size,
quantity: 1
})
const findedStatIndex = stats.findIndex((itemStat) => itemStat.size === sizeItem.size);
if (findedStatIndex >= 0) {
stats[findedStatIndex].quantity++;
} else {
stats.push({
size: sizeItem.size,
quantity: 1
})
}
sizeItem.quantity--;
}
return sizeItem;
});
});
stats = bubbleSort(stats)
return {
stats,
assignment
};
}
function getData(store, order) {
if (store.length === 0 || order.length === 0) {
return false;
}
const storee = store.values();
const {
stats,
assignment
} = generateData([...storee], order)
console.log('store', store);
return {
stats,
assignment
};
}
console.log(getData(
[{
size: 1,
quantity: 2
}, {
size: 2,
quantity: 1
}],
[{
id: 102,
size: [2]
}, {
id: 103,
size: [1]
}, {
id: 104,
size: [1]
}]
))
Ответы (1 шт):
Автор решения: eccs0103
→ Ссылка
Объяснение
Чтобы массив не менялся у нас 2 проблемы.
- Запретить изменение массива целиком.
- Не дать изменить элементы массива.
Ответы на эти вопросы:
Решение
Создадим константный массив и заморозим её:
const readOnlyArray = Object.freeze([1, 2, 3]);
console.log(`До изменения: ${readOnlyArray}`);
try {
readOnlyArray = null; // При попытке изменить константу выскакивает ошибка
} catch (error) {
console.error(error.message);
}
readOnlyArray[0] = 5; // При попытке изменить элемент ошибки не будет, но и элемент изменить не удастся
console.log(`После изменения: ${readOnlyArray }`);