2016-07-10 6 views
0

나는 흥미로운 작업을했습니다. 나는 그것의 절반을 풀었지만 나머지를 풀기위한 해결책을 찾을 수는 없다. 누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다.Object.keys 역순으로

solution 광산 작업에 가깝습니다. 그러나 내 것은 약간 다르며 ES6을 사용합니다.

중첩 된 개체가 있습니다.

let someList = { 

    value: 1, 

    next: { 

     value: 2, 

     next: { 

     value: 3, 

     next: { 

      value: 4, 

      next: null 

      } 

     } 

    } 

}; 

모든 값을 받았습니다.

function reversePrint(linkedList) { 

Object.keys(linkedList).map(key => { 
let myKey = linkedList[key]; 
typeof myKey == "object" ? console.log(reversePrint(myKey)) : console.log(myKey); 
}); 

} 

reversePrint(someList); 

하지만 문제는 다음과 같습니다. 어떻게 모든 값을 역순으로 얻을 수 있습니까?

바이올린 : https://jsfiddle.net/L83puqbz/17/

내가 사용하는 배열을 만들고 그것을 반대하는 감소 시도했지만 모든 값은 별도의 배열했다. 어떤 도움이 크게 appriciated됩니다 https://jsfiddle.net/L83puqbz/20/

바이올린.

+1

스택을 사용하십시오 .... – Ben

+0

object.keys로 솔루션을 벌금을 부과하지 않았거나 줄였습니다 – Lucky

+0

왜 Object.keys를 사용하고 싶습니까? –

답변

5

편집 - 죄송합니다.

다음 코드는 링크 된 목록을 거쳐 값을 역순으로 인쇄합니다.

로그는 재귀 호출 이후이므로 콘솔 로그가 시작되기 전에 마지막 노드로 이동합니다. 그런 다음 각 콘솔 로그가 끝나면 스택의 현재 기능이 종료되어 이전 기능이 계속 인쇄됩니다.

let someList = { 
 
    value: 1, 
 
    next: { 
 
    value: 2, 
 
    next: { 
 
     value: 3, 
 
     next: { 
 
     value: 4, 
 
     next: null 
 
     } 
 
    } 
 
    } 
 
}; 
 

 
function printAfter(node){ 
 
    if(node.next != null){ 
 
    printAfter(node.next); 
 
    } 
 
    console.log(node.value); 
 
} 
 

 
printAfter(someList)

+0

대단히 감사합니다! 재귀를 사용하고 숫자를 얻었으나 역순으로 얻으려고합니다. – Lucky

+0

@Lucky 그래서 결과로'1, 2, 3, 4'을 원하십니까? 그냥 – rpadovani

+0

@ 스퀘어 인 경우에'console.log()'를 옮기십시오. – curtainrising

3

다른 제안, 당신은 재귀와 함께이 작업을 수행 할 수 있습니다.

function reverse(node) { 
    return (node.next === null) ? [node.value] : [...reverse(node.next), node.value]; 
} 

또는 간단한 루프를 사용할 수 있습니다 : 첫 번째 솔루션의

function reversedValues(node) { 
    const values = []; 
    while (node !== null) { 
     values.unshift(node.value); 
     node = node.next; 
    } 
    return values; 
} 

장점은 단순함과 우아함입니다. 단점은 연결된 목록이 정말 거대한 경우 스택 오버플로가 발생할 수 있다는 것입니다. 두 번째 솔루션은 다소 복잡하고 장황하지만 스택 오버플로가 발생하지는 않습니다.