2017-11-17 3 views
1

オブジェクトの構造化を実行中に、キーが存在しない場合はデフォルト値(undefinedKey)を指定することができます。非構造化オブジェクトの空の文字列にデフォルト値を提供する方法

(文字列)キーが存在する場合、(空であっても)上書きされません。

デストラクション中に空の文字列の上書きを指定できるかどうかは疑問です。以下の例では、私はemptyKeyが、それは構造化代入しながら、空の文字列のオーバーライドを指定することができます場合、私は思ったんだけどOverride for empty key

const testObject = { 
 
    emptyKey: '', 
 
    filledKey: 'Some Initial Value', 
 
}; 
 

 
const { 
 
    emptyKey = 'Override for empty key', 
 
    filledKey = 'Override for filled key', 
 
    undefinedKey = 'Override for undefined key', 
 
} = testObject; 
 

 
console.log(emptyKey); //'' 
 
console.log(filledKey); //'Some Initial Value' 
 
console.log(undefinedKey); //'Override for undefined key'

+0

私は、より大きい関数を明確にするために、できるだけ早くデフォルトを定義しようとしています。値が使われている場所で比較を行うことはできますが、よりクリーンな方法があることを願っています。 – Hodrobond

答えて

2

印刷したいと思います。

いいえ、デフォルト値は、プロパティ値がundefinedの場合のみ考慮されます。この動作を無効にする方法はありません。


回避策として、あなたは、あなた自身の小さなデフォルト値のハンドラを構築することができ

function defaults(obj, test, defaults) { 
 
    return Object.keys(defaults).reduce((acc, prop) => { 
 
    acc[prop] = test(obj[prop]) ? defaults[prop] : obj[prop]; 
 
    return acc; 
 
    }, {}); 
 
} 
 

 
const testObject = { 
 
    emptyKey: '', 
 
    filledKey: 'Some Initial Value', 
 
}; 
 

 
const { 
 
    emptyKey, 
 
    filledKey, 
 
    undefinedKey, 
 
} = defaults(
 
    testObject, 
 
    v => v === undefined || v === '', 
 
    { 
 
    emptyKey: 'Override for empty key', 
 
    filledKey: 'Override for filled key', 
 
    undefinedKey:'Override for undefined key', 
 
    } 
 
); 
 

 
console.log(emptyKey, filledKey, undefinedKey);
ほどエレガントではなく、柔軟性のない

など

+0

それはそれに答える!とても有難い! – Hodrobond

関連する問題