2017-04-01 7 views
0

スタックを構築していますが、プッシュしようとすると「未定義のプッシュ」プロパティを読み取ることができない理由がわかりません。オブジェクトの属性に要素をプッシュできません

function stack(n) { 
    return { 
    size: n, 
    elements: [], 
    push: (item) => { 
     if (this.elements.length < this.size) { 
     this.elements.push(item); 
     return this.elements; 
     } else { 
     return this.elements.length !== n ? true : 'Stack Overflow'; 
     } 
    }, 
    pop:() => { 
     if (n !== 0) { 
     return n !== 0 ? this.elements.pop() : 'Stack Underflow'; 
     } 
    }, 
    isEmpty:() => { 
     return this.elements === undefined; 
    }, 
    isFull:() => { 
     return elements.length === n ? true : false; 
    }, 
    }; 
}; 

何が起こっているかどうもありがとう。

+1

'if(this.elements === undefined ... this.elements.push(1)' - sure?;) – georg

+0

私はあなたがここで何をしようとしているのか理解しています。私の答えを待つ。 –

+0

申し訳ありません、項目を追加します。 – TRG

答えて

0

this.elements === undefinedの場合は、this.elements.push(1)を試してください。 .push()を使用する前にthis.elementsをインスタンス化する必要があります。

if (this.elements === undefined || this.elements.length < this.size) { 
    this.elements.push(1); 
    return this.elements; 

私は本当にあなたが何をしようとして理解していないが、あなたは、私はあなたのコードビットを変更し、それが正常に動作します。この

if (this.elements === undefined || this.elements.length < this.size) { 
    this.elements = <instantiate it here>; 
    this.elements.push(1); 
    return this.elements; 
+1

問題は私が上記の要素を初期化したことですが、私は定義されていません – TRG

+0

Faiz99の上記の答えは正しい方法だと思います。古いjavascriptがキャッシュされていないことを確認してください。プッシュ関数内でデバッガを使用し、this.elementsがプッシュ関数内で定義されていることを確認してください – Zuby

0

ような何かをする必要があります。基本的には、サイズn、n = numberのスタックを挿入します。次に、サイズnに関連するメソッドを実行します。

function stack(n) { 
    return { 
    size: n, 
    elements: [], 
    push: function(item){ 
     if (this.elements.length < this.size) { 
     this.elements.push(1); 
     return this.elements; 
     } else { 
     return 'Stack Overflow'; 
     } 
    }, 
    pop: function(){ 
     return (this.size !== 0 && this.elements.length) ? this.elements.pop() : 'Stack Underflow'; 
    }, 
    isEmpty: function(){ 
     return (this.elements.length < this.size) ? true : false; 
    }, 
    isFull: function(){ 
     return (this.elements.length == this.size) ? true : false; 
    }, 
    }; 
}; 

ここでは、サイズでスタックを初期化します。

var init = stack(2); 

ここで何をしているのかを確認するメソッドを呼び出します。

init.pop() 
    "Stack Underflow" 

    init.isEmpty() 
    true 

    init.isFull(); 
    false 

    init.push(33) 
    [1] 

    init.push(67) 
    [1, 1] 

    init.push(3432) 
    "Stack Overflow" 
+0

"未定義のプロパティ '長さ'を読み取ることができませんが、要素は初期化されます。 – TRG

関連する問題