@doctorcat

Почему исходный массив перезаписывается?

https://jsfiddle.net/c1x5zqwt/

Есть массив объектов со свойствами, в качестве одного из свойств есть массив значений services.

const priceData = [
            {
                title: 'ТЕРАПИЯ',
                services: [
                    {
                        name: 'Вакцинация',
                        price: '200',
                        link: ''
                    },
                    {
                        name: 'Взятие крови для гемотрансфузии',
                        price: '400',
                        link: ''
                    },
                    {
                        name: 'Взятие крови на анализ (ОАК, БХАК)',
                        price: '150',
                        link: ''
                    }

                ]
            },
            {
                title: 'ДИАГНОСТИКА',
                services: [
                    {
                        name: 'Гистологическое исследование (США)',
                        price: '6000',
                        link: 'asdasddddddddddddddddd'
                    },
                    {
                        name: 'Диагностика лампой Вуда',
                        price: '100',
                        link: 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'
                    }
                ]
            }
        ]

у меня несколько структурно таких же значений, далее я хочу из этого массива объектов сделать новый, в котором в поле services будут только те услуги которые соответствуют маске 'вакцина'.
el.services = el.services.map(function (si) {
                if (si.name.toLowerCase().includes('вакцина'.toLowerCase())) return si
            })


но по какой-то причине, у меня перезаписывается исходный массив priceData. Который мне нельзя перезаписывать, так как там всегда должны храниться все элементы.
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Элементы массива priceData - объекты, а объекты не копируются при передаче в функцию в качестве параметров и возврате из функции. Поэтому priceList у вас содержит те же объекты, что и исходный массив. Копируйте их вручную:

priceData.map(n => ({
  ...n,
  services: n.services.filter(m => m.name.toLowerCase().includes('вакцина')),
}));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы