как преобразовать данные дерева в однострочные данные с помощью rxjs - PullRequest
0 голосов
/ 25 декабря 2018

У меня проблема здесь: например, данные дерева:

[{
      key: 1,
      value: 1,
      children: [{
          key: 11,
          value: 11: children: []
      }]
  },
  {
      key: 2,
      value: 2,
      children: []
  }
]

Теперь я хочу это:

[{key:1,value:1},{key:11,value:11},{key:2,value:2}]

Как справиться с этим, используя rxjs или что-то еще? Любое мнение будет оценено.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

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

let arr = [{key: 1,value: 1,children: [{key: 11,value: 11,children: []}]},{key: 2,value: 2,children: []}]

function flatTree(arr){
  return arr.reduce((res, {key, value, children} ) => 
      res.concat({key, value}, ...flatTree(children))
    , [])
}

console.log(flatTree(arr))

Вы также можете сделать это в одном вложенном reduce():

let arr = [{key: 1,value: 1,children: [{key: 11,value: 11,children: []}]},{key: 2,value: 2,children: []}]

let r = arr.reduce(function flatTree(res, {key, value, children} ) { 
      return res.concat({key, value}, ...children.reduce(flatTree, []))
  }, [])

console.log(r)
0 голосов
/ 25 декабря 2018

Создание рекурсивной функции и цикл по массиву.Во время цикла проверьте, является ли текущее значение ключа массивом или нет.Если это массив, то снова вызвать функцию recusrive с новыми данными

let data = [{
    key: 1,
    value: 1,
    children: [{
      key: 11,
      value: 11,
      children: []
    }]
  },
  {
    key: 2,
    value: 2,
    children: []
  }
]

let finalArray = [];

function formatData(data) {


  data.forEach((item) => {
    let obj = {};
    for (let keys in item) {

      if (Array.isArray(item[keys])) {
        formatData(item[keys])
      } else {
        obj[keys] = item[keys];
      }

    }
    finalArray.push(obj)
  })
}
formatData(data);
console.log(finalArray)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...