@historydev
Острая аллергия на анимешников

Почему игнорируется строчка перезаписи поля объекта?

Доброй ночи. Скажите пожалуйста почему я не могу перезаписать поле? Спасибо!

export default function getNavigationTablet(navItems) {

    navItems = navItems.slice(0, 4); // Работает

    navItems.push(
        {
            id: 5,
            title: 'ещё',
            children: []
        }
    ); // Работает

    navItems.find(item => item.id === 5).children = navItems.slice(5, navItems.length); // Не работает

    return navItems

}
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Всё работает:
var navItems = Array.from({length: 10}, (_, id) => ({
  id,
  title: 'ещё',
  children: []
}));
navItems.find(item => item.id === 5).children = navItems.slice(5, navItems.length);
console.log(navItems)

Возможно объекты у вас в получаемом navItems заморожены или просто свойство children имеет запрет на запись, проверьте:
var item = navItems.find(item => item.id === 5);
console.log(
  Object.isFrozen(item), 
  Object.getOwnPropertyDescriptor(item, 'children').writable, 
  Object.isFrozen(item.children)
)

Если заморожен только item или ограничена запись, но сам children не заморожен, то вместо замены children вы можете просто изменить его содержимое:
var children = navItems.find(item => item.id === 5).children;
children.splice(0, children.length, ...navItems.slice(5, navItems.length));

Если заморожено всё, то только грязные хаки с подменой Object.freeze. Но перед этим стоит подумать: если объекты заморожены, наверное для этого была какая-то причина?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы