3 votes

Javascript - Fonction récursive d'un tableau parent/enfant imbriqué qui aplatit le parent uniquement

J'ai un tableau multidimensionnel parent/enfant imbriqué comme suit :

{
  parent: {
     name: "foo"
  },
  children: [
    {
      parent: {
         name: "asdf",
      },
      children: []
    },
    {
     parent: {},
     children: []
    },
    {
     parent: {},
     children: []
    },
    ...
  ]
}

Ce que je veux faire, c'est appliquer une fonction récursive sur ce tableau, pour aplatir uniquement la propriété parentale et garder les enfants tels quels, afin d'obtenir quelque chose comme ceci :

 {
  name: "foo",
  children: [
    {
      name: "asdf",
      children: []
    },
    {
     children: []
    },
    {
     children: []
    },
    ...
  ]
}

J'ai essayé d'utiliser underscore.js mais je ne parviens pas à trouver une fonction récursive qui pourrait faire l'affaire. Avez-vous des idées ?

3voto

Nina Scholz Points 17120

Vous pouvez utiliser une approche itérative et récursive en itérant le tableau et en mettant à jour les propriétés souhaitées.

Si un enfant est trouvé, on recommence l'itération.

var array = [{ parent: { name: 'a', surname: 'b', }, children: [{ parent: { name: 'c', surname: 'd', }, children: [{ parent: { name: 'e', surname: 'f' } }], childrenName: 'v', childrenSurname: 'w' }], childrenName: 'x', childrenSurname: 'y' }];

array.forEach(function iter(object) {
    if (object.parent) {
        object.name = object.parent.name;
        object.surname = object.parent.surname;
        delete object.parent;
    }
    object.children && object.children.forEach(iter);
});

console.log(array);

.as-console-wrapper { max-height: 100% !important; top: 0; }

0voto

raksa eng Points 638

J'espère que ce recurse est ce dont vous avez besoin

const recurse = (data) => {
    for(let i = 0, l = data.length; i < l; i++){
        if(data[i]['parent']){
            data[i]['name'] = data[i]['parent']['name']
            delete data[i]['parent']
        }
        if(data[i]['children']) recurse(data[i]['children'])
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X