Небольшой любитель, демонстрирующий рекурсивный вызов функции, как, возможно, было целью упражнения и использующий 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
, и, конечно, «неразрушающий» по отношению к исходному контенту, поскольку все это локально ограничено.