2017-08-17 13 views
-1

ちょうどnodejsで始まった、Pythonの世界。オブジェクトの反復は、Pythonほど直感的ではないようです。私は例外をスローし、代わりにnodejsを可能にする(私は必要なキーを見つけることができません処理の任意の時点であれば救済したいnodejsのオブジェクトの反復と例外のスロー

  1. :私は、複雑な辞書オブジェクトを持っており、それを持つ2つの課題が生じています追加 '未定義')。 ifsの束なしでこれを行う方法はありますか?例:

    path = dict.url.path //if url or path are not present, throw exception 
    //more nested dict/array looping 
    
  2. きれいなネストされたループにはどのような方法がありますか?私は辞書キーの値として配列の束を持っており、ループはかなり深いです。例えばその一つがfalsy値がある場合はそれが 'ガード' 演算子。(AKA 'と' オペレータ)と呼ばれる

    dict['values'].forEach(value => { 
        value['items'].forEach(item => { 
        ... 
        }); 
    }); 
    
+0

を達成するためにProxyを使用することができることを提供します。 –

答えて

0

1.

path = dict && dict.url && dict.url.path 

。パスは未定義またはヌルなどの偽値でもあります

  1. このように使用できます。あなたはコードの長さをいくつかのトリックで減らすことができますが、読みやすさを損なうでしょう。

あなたはインデントが深すぎる行く心配場合は、上記

value => { 
    value['items'].forEach(item => { 
    ... 
    }); 
} 

関数であり、あなたはそれを変数にすることができますを覚えています。

編集:あなたはあなたの質問の最初の部分の同様の質問No.1の

try { 
    path = dict.url.path; 
    if (!path) { 
    throw new Error('no path'); 
    } 
    // some other codes 
} catch (err) { 
    console.error('dict or url is undefined!', err); 
} 
+0

最初の質問は反対です "私は**例外を投げたい**処理中の任意のポイントで私が必要なキーを見つけられない場合にはベール" –

+0

@YuryTarabankoありがとう私は私の答えを更新しました – ZeroCho

+0

問題ありません。しかし、 'dict.url'が' path'を持っていないとコードがどのようにスローされるのか分かりません。 –

0

のための例外をスローしたい場合。あなたはノードV8を使用している+あなたはこれが良い2つの別々の質問に分割されるべきこの

const strictAccess = obj => new Proxy(obj, { 
 
    get(target, property) { 
 
    if (!Reflect.has(target, property)) { 
 
     throw new Error(`Object doesn't have property ${property}.`) 
 
    } 
 
    const value = Reflect.get(target, property) 
 

 
    return typeof value === 'object' ? strictAccess(value) : value 
 
    } 
 
}) 
 

 
const dict = strictAccess({ 
 
    url: { 
 
    path: 'path value' 
 
    } 
 
}) 
 

 
try { 
 
    dict.missingProperty 
 
} catch (e) { 
 
    console.log(e.message) 
 
} 
 

 
try { 
 
    dict.url.missingProperty 
 
} catch (e) { 
 
    console.log(e.message) 
 
} 
 

 
console.log(dict.url.path)

関連する問題