Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.06.2020, 16:04
Аспирант
Отправить личное сообщение для oleg901 Посмотреть профиль Найти все сообщения от oleg901
 
Регистрация: 12.08.2018
Сообщений: 54

Error maximum call stack size exceeded
Доброго времени суток, есть большой объект на полторы тысячи строк в нем есть вложенные обьекты. Есть рекурсивная функция которая переберает все поля включая вложеные и меняет значения полей совпадения которых были найдены на пустую строку. Какое именно поле будет пустым, передается вторым параметорм функции первым параметром передается сам объект. Вот функция:

function clearPropertiesInObject(obj, value) {
        let result = getProp(obj, value);
        function getProp(obj, value) {
            for (let prop in obj) {
                if (typeof obj[prop] === 'object') {
                        getProp(obj[prop], value)
                } else if (prop === value) obj[prop] = '';
            }
            return obj;
        }
        return result;
    }


    let newObj = clearPropertiesInObject(obj, "email");
    }


Тестировал ее в html файле и браузере вместе с объектом работает корректно попробовал забросить на бэкенд (node js) в проект пишет Error maximum call stack size exceeded подскажите как обойти и в чем проблема? Почему в браузере не выводит переполнение стэка, а нода выводит ходя движки одинаковые. Тестировал html файл в хроме
Ответить с цитированием
  #2 (permalink)  
Старый 17.06.2020, 18:37
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

6 строку обернуть в
setTimeout(() => {...code here...}, 0)


можно только про прототипам объектов пробежаться и выставить нужное значение, если все было сделано ) как надо...
Ответить с цитированием
  #3 (permalink)  
Старый 17.06.2020, 19:54
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Тратить 4 мс на каждый вызов?
Тогда уж лучше queueMicrotask

queueMicrotask( () => getProp(obj[prop], value))

Хотя какая то странность, что в браузере нет переполнения, а в ноде есть.
Может объекты разные?
Ответить с цитированием
  #4 (permalink)  
Старый 18.06.2020, 11:12
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от oleg901
есть большой объект на полторы тысячи строк в нем есть вложенные обьекты.
какая максимальная глубина вложенности?
есть ли в объекте циклические ссылки?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пазл .js нужно что бы когда пазл собран - загружалась html micrioni Оффтопик 6 16.01.2020 12:28
Обновление содержимого страницы поверх старой - возможно ли? Paguo-86PK Элементы интерфейса 12 27.10.2018 13:13
Как правильно перебрать условия из разных таблиц? the_little Общие вопросы Javascript 10 30.10.2017 09:19
Заменить значения value в форме при отправке на email the_little Общие вопросы Javascript 26 29.10.2017 21:26
Установка CCNET Maks_it Node.JS 1 01.06.2017 18:21