Построить дерево из массива javascript с идентификатором родителя внутри скобок

#javascript #arrays #json #reactjs #tree

#javascript #массивы #json #reactjs #дерево

Вопрос:

Теперь, прежде чем пометить этот вопрос как дублирующий, выслушайте меня.

у меня есть ответ json в reactjs, который выглядит так

 organisationUnits: [
  {
     name: "0.Mzondo",
     id: "nW4j6JDVFGn",
     parent: {
       id: "Ppx2evDIOFG"
     }
 },
 {
   name: "1 Chipho",
   id: "eE4p4gXpR4p",
   parent: {
     id: "JKNTgsOVMOo"
   }
 }, {}, {}, ....
  
}]
  

теперь я искал в сети решение для преобразования списка в дерево, у меня есть много кода от людей, но, похоже, это не работает.
Я тоже пробовал https://github.com/yi-ge/js-tree-list и https://www.npmjs.com/package/list-to-tree а также https://www.npmjs.com/package/array-to-tree

но ничего не работает, я предполагаю, что это потому, что мой родительский идентификатор заключен в круглые скобки. Так что ничего онлайн не работает. Если у кого-нибудь есть решение для этого, мы были бы очень признательны.

Комментарии:

1. почему вы не меняете parent.id родительскому перед использованием этих библиотек

2. Рассматривали ли вы возможность просто написать функцию для этого самостоятельно? Я не думаю, что это потребует таких больших усилий.

3. @evgenifotia Мне искренне жаль, что я тупой …. такая простая идея, и вы сэкономили мне время …. спасибо вам ооочень большое

Ответ №1:

Хорошо для всех тех, кто может застрять в будущем, вот как я решил проблему.

на удивление, я не очень умный, поэтому неправильный выбор карьеры…. далее

 var arrayToTree = require('array-to-tree');

var array = [
  {
     name: "0.Mzondo",
     id: "nW4j6JDVFGn",
     parent: {
       id: "Ppx2evDIOFG"
     }
 },
 {
   name: "1 Chipho",
   id: "eE4p4gXpR4p",
   parent: {
     id: "JKNTgsOVMOo"
   }
 }, {}, {}, ....
  
} 

array.map((item) => {
                    //

                    if(item.parent != null){
                        //console.log(item.parent.id)
                        item.parent = item.parent.id
                    } else {
                        item.parent = undefined
                    }
                });

                var tree = arrayToTree(array, {
                    parentProperty: 'parent',
                    customID: 'id'
                });

                console.log( tree );

                this.setState({
                    orgUnits : tree
                });

  

Выполнено.
Большое спасибо всем, кто помог. как на самом деле