2016-05-18 2 views
0

次のコードを短くするにはどうすればいいですか?3つの状況のた​​めの他の略語コード

if (typeof dIndex === 'undefined') { 
    dPolylines = []; 
} else { 
    if (typeof rIndex === 'undefined') { 
     dPolylines[dIndex] = []; 
    } else { 
     dPolylines[dIndex][rIndex] = []; 
    } 
} 

私はこの8行のコードを最大3行に簡単に変換できると思っていますが、これをどう扱うかについては適切な考え方がありません。

私はコード全体でこのコードを数回必要とします。

+0

'ternary'演算子を使用しますか? –

+1

異なる配列キーのために、短いバージョンを作ることはできません。 – Justinas

+3

コードが壊れています。 elseブランチで未定義の 'dIndex'を使用しています –

答えて

0

だから、可能な解決策がいくつかあります。最初のものは三項演算子を使用することですが、それはすべてがきれいではありません。

typeof dIndex === 'undefined' ? dPolylines = [] : (typeof rIndex === 'undefined' ? dPolylines[dIndex] = [] : dPolylines[dIndex][rIndex] = []); 

あなたが見ることができるように、それだけであまりにも長いです。 Archerの答えを考えれば、次のようになります。

if (typeof dIndex === 'undefined') { 
    dPolylines = []; 
} else if (typeof rIndex === 'undefined') { 
    dPolylines[dIndex] = []; 
} else { 
    dPolylines[dIndex][rIndex] = []; 
} 

これは6行になりますが、これはまだかなり長いです。私は私の元のコード全体のコードを複数回のこの部分を必要とするつもりですので、しかし、私は機能にそれを変換:

dPolylines = clearDirectionsArray(dPolylines, dIndex, rIndex); 

function clearDirectionsArray(array, dIndex, rIndex) { 
    if (typeof dIndex === 'undefined') { 
     array = []; 
    } else if (typeof rIndex === 'undefined') { 
     array[dIndex] = []; 
    } else { 
     array[dIndex][rIndex] = []; 
    } 

    return array; 
}; 

これは最終的に大幅にコード全体の行の量を下げるだろう。これはもともと質問に載せられていませんでしたが。

0
typeof dIndex !== 'undefined' ? dPolylines = [] : ElseCheck() 


function ElseCheck(){ 
    typeof rIndex !== 'undefined' ? dPolylines[dIndex][rIndex] = [] : dPolylines[dIndex] = [] 
} 

ちょうど

0
function straightFill(obj, keys) { 
    obj = obj || {}; 
    var cur = obj; 
    var key = keys.shift(); 
    while (typeof key != 'undefined') { 
    cur[key] = {}; 
    cur = cur[key]; 
    key = keys.shift(); 
    } 
    console.log(JSON.stringify(obj)); 
    return obj; 
} 

var a = {}; 
straightFill(a, ['key1', 'key2']);    // {"key1":{"key2":{}}} 
straightFill(null, [undefined, 'key2']);  // {} 
straightFill(null, ['key1', undefined, 'key2']);// {"key1":{}} 

私は配列の代わりにオブジェクトを使うのはなぜ三条件をしようと?
は あなたがinsequencedまたは非数値キーで配列を使用しないでください。

>> a = [] 
<< [] 
>> a['key'] = 5 
<< 5 
>> a 
<< [] 
>> a.key 
<< 5 
>> a[2] = 4 
<< 4 
>> a 
<< [undefined × 2, 4] 
>> a.length 
<< 3 
>> Object.keys(a) 
<< ["2", "key"] 

三項ソリューション:あなたのコードに適用

typeof dIndex == 'undefined' ? dPolylines = [] : 
    typeof rIndex == 'undefined' ? dPolylines[dIndex] = [] : 
     dPolylines[dIndex][rIndex] = []; 
1

Archer's comment

if (typeof dIndex === 'undefined') { 
    dPolylines = []; 
} else if (typeof rIndex === 'undefined') { 
    dPolylines[dIndex] = []; 
} else { 
    dPolylines[dIndex][rIndex] = []; 
} 

はるかに短くありません、しかし、まだ理解できます(おそらく元のコード)。

1

任意の読みやすさを失うことなく、それを短くするために、私はちょうどこのわずかにそれをトリミングお勧めします...

if (typeof dIndex === 'undefined') { 
    dPolylines = []; 
} 
else if (typeof rIndex === 'undefined') { 
    dPolylines[dIndex] = []; 
} else { 
    dPolylines[dIndex][rIndex] = []; 
} 

あなたはさらに一歩それを取ると、このような中括弧を削除することができ...

if (typeof dIndex === 'undefined') dPolylines = []; 
else if (typeof rIndex === 'undefined') dPolylines[dIndex] = []; 
else dPolylines[dIndex][rIndex] = []; 

個人的には、中括弧が使用されている場合よりもはるかに簡単な間違いになる可能性がありますが、それぞれ独自のものになります。これはまだ読みやすく、現在は3行だけです。

両方の長所について、あなたは単に私が作った最初の提案を再フォーマットし、私が今まであなたのコードのいずれかを見れば、私はうんざり作ることができます:P

if (typeof dIndex === 'undefined') { dPolylines = []; } 
else if (typeof rIndex === 'undefined') { dPolylines[dIndex] = []; } 
else { dPolylines[dIndex][rIndex] = []; } 
関連する問題