2013-08-23 3 views
2

Как удалить объект внутри другого объекта, если я не знаю его глубины?Удаление объекта внутри другого объекта, не зная его глубины

Json Объект

{ 
    "foo": { 
    "1" : { 
     "bar" : "a", 
     "foo" : { 
      "2" : "aa" 
     } 
     }, 
    "3" : { 
     "bar" : "b", 
     "foo" : { 
      "4" : "bb" 
     } 
     } 
    } 
} 

Пусть говорят, что я хочу, чтобы удалить «4», а «4», возможно, был первым ребенком уровня или быть внутри другого ребенка?

+2

Чтобы быть ясно, является ли эта строка JSON, или объект javascript? –

+2

Что делать, если есть несколько 4 (или вообще ничего)? –

+0

в любом случае, рекомендуется изменить структуру данных –

ответ

5

Вот еще рекурсивным решение, разница между моей версией и adeneo является то, что шахта остановится, как только соответствующий ключ найден. Это более эффективно, если вы знаете, что не будет несколько вхождений одного и того же ключа, или в порядке только с удалением одного из каждого вхождения на один вызов:

function remove(obj, key) { 
    for (var k in obj) { 
     if (k == key) { 
      delete obj[key]; 
      return true; 
     } else if (typeof obj[k] === "object") { 
      if (remove(obj[k], key)) return true; 
     } 
    } 
    return false; 
} 
+0

Спасибо за объяснения! –

5

итерация ключ:

function remove(obj, key) { 
    for (k in obj) { 
     if (k==key) { 
      delete obj[k]; 
     }else if (typeof obj[k] === 'object') { 
      remove(obj[k], key); 
     } 
    } 
} 

FIDDLE

+0

Отличный ответ, палец вверх! –

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