2016-07-10 14 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/

私は使用は、配列を作成し、それを逆にするために減らす試みたが、すべての値が別の配列にしました。

フィドルhttps://jsfiddle.net/L83puqbz/20/

すべてのヘルプは大幅にappriciatedされます。

+1

スタックを使用する... – Ben

+0

私は使用しましたが、object.keysまたはreduceを使用して解決策を講じなかった – Lucky

+0

なぜObject.keysを使用しますか? –

答えて

5

EDIT - 申し訳ありません、もっと説明があります。

次のコードは、リンクされたリストを通過し、逆の順序で値を出力します。

ログは再帰呼び出しの後にあるため、コンソールログが開始する前に最後のノードに移動します。その後、各コンソールログの後に、スタック内の現在の機能が終了し、前の機能がそのまま印刷されます。

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

@squintの前に 'console.log()'を動かすだけで、十分に私はそれを更新します。 – curtainrising

3

他の人が示唆したように、あなたは再帰でこれを行うことができます。

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

それとも、あなたは単純なループを使用することができます。第1の溶液の

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

利点は、シンプルさと優雅さです。欠点は、リンクされたリストが本当に巨大な場合、スタックオーバーフローにつながる可能性があることです。 2番目の解決法はもうちょっと冗長で冗長ですが、スタックオーバーフローは起こりにくいです。