Преобразовать связанный список вложенных объектов в узел массива js - PullRequest
0 голосов
/ 12 мая 2018

Вложенный объект связанного списка

Входные данные должны быть такими

var ii = {"val":"1","next":{"val":"2","next":{"val":"3","next":{"val":"4","next":{"val":"5","next":null}}}}}; 

Выходные данные должны быть похожи на [1,2,3,4,5]

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Небольшой любитель, демонстрирующий рекурсивный вызов функции, как, возможно, было целью упражнения и использующий Array.reduce().

var ii = {
  "val":"1", "next":{
    "val":"2", "next":{
      "val":"3", "next":{
        "val":"4", "next":{ "val":"5", "next":null }
      }
    }
  }
};

const process = obj => {
  const remap = (acc,[k,v]) => ([
    ...acc,
    ...(( k === 'val') ? v : (v === null)
      ? [] : Object.entries(v).reduce(remap,[]))
  ]);

  return Object.entries(obj).reduce(remap,[]);
};

console.log(process(ii));

Вист фантазии, это не так эффективно. Таким образом, все еще придерживаясь «неразрушающего», вы можете взять клон объекта и все равно повторить:

var ii = {
  "val":"1", "next":{
    "val":"2", "next":{
      "val":"3", "next":{
        "val":"4", "next":{ "val":"5", "next":null }
      }
    }
  }
};


const process = obj => (({ val, next }) => 
  [ val, ...((next !== null) ? process(next): []) ])(obj);

console.log(process(ii));

Даже чище и эффективнее, чем while, и, конечно, «неразрушающий» по отношению к исходному контенту, поскольку все это локально ограничено.

0 голосов
/ 12 мая 2018

Решение

var ii = { "val": "1", "next": { "val": "2", "next": { "val": "3", "next": { "val": "4", "next": { "val": "5", "next": null } } } } }; 
var arr = [ii.val]
while(ii.next !== null){
    ii = ii.next;
    arr.push(ii.val)
}
console.log(arr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...