2015-11-16 6 views
2

У меня есть сложный файл JSON с массивами и объектами, содержащими массивы и объекты, примерно на 10 уровней. Я загружаю файл JSON в Node.js. Я пытаюсь написать функцию, которая ищет весь объект, включая все вспомогательные объекты и вспомогательные массивы, и удаляет любой ключ с определенным именем. Это то, что у меня есть:JavaScript JSON найти и удалить

function deleteKey(object, key) { 
    for(var property in object) { 
    if(property==key) { 
     delete object[property]; 
    } else { 
    deleteKey(object[property], key); 
    } 
    } 
} 

Я получаю размер стека превышен. Есть ли способ лучше?

+1

Только FWIW, к тому времени, как вы его обрабатываете, это уже не JSON. Это объекты и массивы. –

+0

Я знаю. Наверное, я только что сказал JSON, чтобы уточнить, что я должен иметь возможность справляться с чем угодно. Я не знаю глубины или каких-либо других сведений о формате объекта. –

+0

Вы не должны получать stackoverflow из рекурсивной обработки обычного JSON (т. Е. Не вложенного в тысячи уровней). – Bergi

ответ

3

Предполагая, что вы хотите, чтобы эта функция работала с объектом JavaScript любой глубины, это было бы хорошей ситуацией, чтобы воспользоваться рекурсией.

function deleteKey(object, key) { 
    for(var property in object) { 
    if(property==key) { 
     delete object[property]; 
    } else { 
     if(object[property] !== null && typeof object[property] == 'object'){ 
     deleteKey(object[property], key); 
     } 
    } 
    } 
} 
+2

Ну, они уже используют рекурсию. Вопрос OP - это больше о том, почему они получают ошибку переполнения стека, чем базовая структура. [Я бы тоже (на самом деле, когда вы удалили свой ответ и до того, как я полностью понял вопрос, doh!) Восстановить OP 'else'; нет причин снова проверять свойство.] –

+0

Я думаю, что не рекурсия в примитивы сделала это! Интересно. –

+1

@ T.J.Crowder: Индексы строк перечислены: -/ – Bergi

Смежные вопросы