Обрезка листьев прочь дерева объектов

голоса
0

У меня есть это «дерево».

Это многомерный объект. Каждый «узел» имеет не более двух свойств, которые являются dataи children.

Вот пример:

{Account: { data: ['stuff'], children: {
  share: {data: ['stuff'], children: {
    share name: {},
    share hold: { data: ['stuff'] }   
  }},
  card: { children: {
    card_access: { data: ['stuff'] } 
  }},
  loan: { children: {
    loan_name: {}
  }}
}}

Мне нужно , чтобы удалить все узлы , которые не имеют dataатрибута , а также не имеют детей с dataатрибутом.

Таким образом, приведенный выше пример станет:

{Account: { data: ['stuff'], children: {
  share: {data: ['stuff'], children: {
    share hold: { data: ['stuff'] }   
  }},
  card: { children: {
    card_access: { data: ['stuff'] } 
  }},
}}

Самый краткий путь для достижения этой цели в JS?

Задан 22/07/2015 в 20:23
пользователем
На других языках...                            


1 ответов

голоса
1

Это делает трюк:

function trimEmpty(obj) {
  for(var o in obj) {
    if(typeof obj[o] === 'object') trimEmpty(obj[o]);
    if(JSON.stringify(obj[o]) === '{}') delete obj[o];
  }
} //trimEmpty

trimEmpty(obj);

Snippet:

var obj = {
  Account: {
    data: ['stuff'],
    children: {
      share: {
        data: ['stuff'],
        children: {
          share_name: {},
          share_hold: {
            data: ['stuff']
          }
        }
      },
      card: {
        children: {
          card_access: {
            data: ['stuff']
          }
        }
      },
      loan: {
        children: {
          loan_name: {}
        }
      }
    }
  }
}

function trimEmpty(obj) {
  for(var o in obj) {
    if(typeof obj[o] === 'object') trimEmpty(obj[o]);
    if(JSON.stringify(obj[o]) === '{}') delete obj[o];
  }
} //trimEmpty

trimEmpty(obj);
document.querySelector('pre').innerHTML= JSON.stringify(obj, null, 2);
<pre></pre>

Ответил 22/07/2015 в 20:41
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more