私は現在Eloquent JSの本からJavascriptとDataStructuresを勉強しています。私の現在の割り当ては "要素とリストをとり、その要素をinoputリストの先頭に追加する新しいリストを作成するヘルパ関数prependを書く"です。私は改善したいので、必ずしも私の仕事を探しているわけではありませんが、私を啓発してください。私は3つの質問がありますが、私の主な問題は1番目の問題です。オブジェクトタイプエラーPrepend関数
1:私のコードでは、私のタイプエラーはどこですか?コンソールログに "TypeError:oldObj is undefined"と表示されますが、関数内で初期化します。
lsPre = function(obj)
{
var iter = 0;
var maxIT = 0; //use to capture final object iteration
var oldObj = obj; //initialize old object
//create new object to prepend to old object
var newObj = {iteration: iter,
value: 'Overwrite this Value',
next: oldObj.next
};
while (oldObj.iteration + 1 > maxIT)
{
maxIT++;
newObj.next = oldObj.next;
oldObj = oldObj.next;
}
return newObj;
}
2:より最適な解決策(パラダイム)があり、それから私の意図するプリペンド機能はありますか?私は、より多くのjs指向のパラダイムを学習しようとしており、現在は再帰的な解決法を避けています。
3以下は、上記と同じ問題セットの以前の問題に対するリンクリスト再帰的ソルーションです。
Object {iteration: 1, value: 2, next: Object}
いうより:それはのようなオブジェクトを返しますが理由です
Object {iteration: 1, value: x, next: Object { iteration: 2, value: x, next: (and so on) }}
ここでは、コードは次のとおりです。
//Link List
rayREC = function(ray,iter=0)
{ //Default param 'inc' allows arbitrary implementation of this function
var rLen = ray.length;
if (iter > rLen) return;
return {//recurively increment objects
iteration: iter,
value: ray[iter],
next: rayREC(ray,iter + 1), //recursion
};
}
私も3に最適なパラダイムやソリューションをしたいと思います。
回答1まだタイプエラーが発生しています。質問3の関数で作成された新しいリストを考えてみましょう。編集:申し訳ありませんが、モバイルブラウザは私に改行をさせませんので、ここではフォーマットが貧弱です:z = rayRec([1,2,3,4]); lsPre(z); // "TypeError oldObjは未定義です" –
代わりに、 'TypeError:undefined'の反復 'プロパティを読み取れません'が表示されるはずです。これは 'lsPre'のwhileループの中の' oldObj = oldObj.next; 'に起因します。最後のオブジェクトの次は 'null'です。 – kazenorin
それだけです!どうもありがとう! –