2012-03-11 18 views
1

私はユーザーが作成した要素の数を循環するforループを持っています。このプラグインには利用可能な設定が多数あり、各要素に固有の設定を受け取ることができます。Javascriptで多くの値を分割して割り当てるより良い方法はありますか?

  1. ユーザー設定は、次の形式で入力される:speed_x: "1000,500> 1000,200> 0,0" これは3つの別々の要素用/アウトspeed_xを制御します。 >はオブジェクトで区切り、コンマはイン/アウトを区切ります。

  2. だから、特定のオブジェクトspeed_x値を取得することができ、私は、その結果speed_x_set(>で分割)にspeed_xを分割しました:

1 1000,500
2 1000,200
ループ内で3 0,0`

3、私は(speed_x_inとspeed_x_outを取得する。)インデックスで値を取得(それはオブジェクト#だから)とカンマでそれを分割

for(var i=0; i<OS.numberofobjects; ++i){ 
    OS.speed_x_on_set[i]=speed_x_set[i].split(",")[0], 
    OS.speed_x_off_set[i]=speed_x_set[i].split(",")[1], 
    ... 
}; 

すべては、オブジェクトによって割り当てられ、マスターOS設定オブジェクトに正しく設定されます。 T * 私はこのように分割する必要のある多くの設定を持っています... *:delay_x_set、speed_y_set、opacity_setなど名前はすべてデフォルトの設定名に基づいていて、 "_set "上記のように追加されました。うまくいけば、これは十分な情報を提供します。ありがとう!

+3

値を2回に分けないようにするには、まずspeed_x_set [objindex] .split( "、")を変数に割り当てます。 –

+1

ループ変数に 'i'を使用すると、視覚的ノイズにも役立ちます。 – sdolan

+0

ループ内の反復子変数としてiを使用するためのUpvote。それは本当に読むのに役立ちます:) –

答えて

1

私はあなたがparallel assignmentと呼ばれている探しているものを、分割結果に

for(var objindex=0; objindex<OS.numberofobjects; ++objindex){ 
    var splits = speed_x_set[objindex].split(","); //Cache the split so its does not need to be done twice 
    OS.speed_x_on_set[objindex] = splits[0]; 
    OS.speed_x_off_set[objindex] = splits[1]; 
    ... 
}; 
+0

なぜ結果をキャッシュしたいですか?私は私が従うが、ループが1)オブジェクト1を押す2)入力されたすべての速度値を含むspeed_x_setに行く3)正しい速度値を見つける( "1000,1000"のように見える "in 、out ")4)値を分割し、1番目の値をOS.speed_x_on_setに、2番目をOS.speed_x_off_set .....に割り当てます。どのようにして結果にキャッシュが正しく反映されますか?ありがとう! – Aaron

+2

@Aaron:あなたのコードでは、 'speed_x_set [objindex] .split("、 ")'を2回実行しています。私。それは 'speed_x_set [objindex]'を検索し、@Starxのコードではなく、文字列を2回分割する必要があります。それはあなたが(全体的な問題についての詳細な情報を持っていなくても)できる唯一の改善です。 –

0

をキャッシュするように言うだろうが、残念ながら、JavaScriptはそれを持っていません。 Rubyで

は、しかし、同様のパターンを確認するのが一般的である:

first, second = "first second".split 

他の人が指摘したように、明らかな方法は、分割結果をキャッシュし、それらを別々に割り当てることであろう。ご質問に直接お答えしないと申し訳ありません。

2

同じアイテムに2回アクセスすることを避け、繰り返しごとに同じsplitを2回実行します。 JavaScriptの1.7(Firefoxの)中であなたは、単に持っていることを

for (var i = 0, item; item = speed_x_set[i++];) { 
    var values = item.split(","); 
    OS.speed_x_on_set.push(values[0]); 
    OS.speed_x_off_set.push(values[1]); 
} 

お知らせ:同様のECMAScriptの次期バージョンで

for (var i = 0, item; item = speed_x_set[i++];) { 
    var [on, off] = item.split(","); 
    OS.speed_x_on_set.push(on); 
    OS.speed_x_off_set.push(off); 
} 

、うまくいけばだから、あなたのようなものを持つことができます。 これは「非構造化割り当て」と呼ばれています。

+0

Awww、それは素晴らしいと感謝して、感謝!しかし、問題は約60の設定があるので、実際のループコードはかなり長いです。彼らはすべて同じことをやっている。例:speed_x: "1000,500> 1000,500> 200,500"のように、3つのオブジェクトにspeed_xを設定できます。最初の2つのオブジェクトはspeed_x_inが1000、speed_x_outが500です.3番目のオブジェクトはspeed_x_inが200で500からです。オブジェクトは最初にspeed_x_setに分割されます(speed_x_set = index 1:1000,500 、インデックス2:1000,500 ...などそこからコンマで分割し、OS.speed_x_setにプッシュする必要があります。 – Aaron

+0

投稿したコードはうまくいきました。ちょっとしたコードのようです。例delay_x(まったく同じ方法で書かれています)私はこれを達成する方法がわかりません...ありがとう! – Aaron

+0

私はあなたに従っているかどうかわかりませんが、実際のコードを見るべきでしょう。 'values = speed_x.split(/、|> /);'そして、あなたはすべての値を持つ配列を持ち、それらがペアになっていることを知っているので、それらを反復することができます。 MyValues.speed_x = "..."; MyValues.speed_y = "..."; '次のようにすることができます:' for(var prop MyValues内)doSomething(MyValues [prop]) ';そんな感じ。 – ZER0

関連する問題