Убрать объекты из массива не меняя исходный массив
Подобный вопрос уже есть, НО в данной задаче необходимо: Убрать из массива все объекты с типом "additional", а для "basic" очки уменьшить в двое.
И самое главное условие: Cоздать новый массив, оставляя исходные данные неизменными
То есть исходный массив myLesson менять нельзя.
const myLesson = [
{lesson: 1, type: 'basic', points: 2},
{lesson: 2, type: 'additional', points: 4},
{lesson: 3, type: 'basic', points: 6},
{lesson: 4, type: 'additional', points: 3},
{lesson: 5, type: 'basic', points: 4},
{lesson: 6, type: 'basic', points: 2},
{lesson: 7, type: 'additional', points: 2},
{lesson: 8, type: 'basic', points: 6},
{lesson: 9, type: 'basic', points: 4},
{lesson: 10, type: 'basic', points: 6},
{lesson: 11, type: 'additional', points: 5},
{lesson: 12, type: 'basic', points: 2},
{lesson: 13, type: 'additional', points: 2},
{lesson: 14, type: 'basic', points: 4},
{lesson: 15, type: 'additional', points: 1},
{lesson: 16, type: 'additional', points: 7},
];
Пытался по всякому
Например так:
let array = myLesson.slice().filter(item => item.type !== 'additional')
.map(item => item.points /= 2);
Или так:
const array = [...myLesson];
const array2 = array.filter((item) => item.type !== 'additional')
.map(item => item.points /= 2);
Попыток было много, но все они ни к чему не привели. В исходном массиве myLesson всё равно меняется значение points
Помогите, люди добрые, идей у меня нет, те что были - не работают как надо
Ответы (1 шт):
Вызов slice не нужен, filter уже конструирует новый список.
В приведенной попытке map преобразует массив объектов в массив чисел, так как оператор присваивания с делением внезапно возвращает результат операции. А надо конструировать новый объект из старого, вот так.
myLesson
.filter(item => item.type !== 'additional')
.map(item => ({...item, points: item.points/2}));
Сначала берем item как есть и модифицируем нужное поле нужным образом.