2016-12-22 6 views
0

私は結果オブジェクトを設定するために使用するフィールド配列を持っています。値がboolean falseに評価される変数にオプションの値を指定する方法は?

form: { 
    fields: [{ 
    name: 'name', 
    value: 'Peter' 
    } , { 
    name: 'age', 
    value: 0 
    }] 
} 

form.fields.forEach(field => { 
    result[field.name] = field.value || 
    original.value 
} 

私はあなたが問題を見ることができると思います:それは偽と評価されますので、value: 0は結果に設定されることはありませんフィールドが空の場合、結果は、フィールドの既存の値を使用しています。

このような場合の通常の解決方法を教えてください。 0trueと評価する必要がある場合は、

答えて

1

値がundefinedある場合は、field.value !== undefinedを行うことによって確認することができます。

form.fields.forEach(field => result[field.name] = field.value !== undefined ? field.value : original.value); 

コード例:

let zero = 0; 
 

 
console.log(zero !== undefined ? zero : 'other value');

+0

したがって、 'typeof'は不要ですか? – alex

+0

はい、次のようにして変数が 'undefined'であるかどうかをテストできます:' x === undefined' –

1
parseInt(val) === 0 

===チェックタイプ(int型)だけでなく

か、これが0として真とだけundefined

1

としてこの方法であなたを評価します

typeof field.value != 'undefined' 

を試すことができますあなたのフィールドがの値を全く持たないことを確認することができますだけでなく、0でも""空の文字列も同様です。

form.fields.forEach(field => { 
    if(typeof field.value !== "undefined") { 
     result[field.name] = field.value 
    } else { 
     result[field.name] = original.value; 
    } 
} 

EDIT:

@Felix Klingのコメントで提案されているように、短いバージョン三項演算子を使用して:

form.fields.forEach(field => { 
    result[field.name] = typeof field.value !== "undefined" ? field.value : original.value; 
} 
+2

それとももう少し簡潔:! '結果[field.name] = typeofをfield.value == '未定義'? field.value:オリジナル。値; '。 –

関連する問題