2016-09-01 15 views
0

オブジェクトのプロパティを使用して、より短い方法で変数をデリバーする方法を見つけようとしています。オブジェクトのプロパティを使用してforループの変数を宣言する

私はこのようなパラメータとして渡された「userOptions」オブジェクトがあります:私は、変数としてオプションを宣言するためにuserOptionsとの比較「defaultOptions」と呼ばれる別のオブジェクトを持っているMyFunctionので

var example = new myFunction({ 
    maxLimit: 30, 
}); 

を。次の例は、すでに十分に短く見えるかもしれません。しかし、オプションの数が増えると効率が悪くなります。

function myFunction(userOptions) { 
    var defaultOptions = { 
     maxLimit: 20, 
     minLimit: 10 
    } 

    // Apply user options 
    for (var i in defaultOptions) { 
     if (userOptions.hasOwnProperty(i)) { 
      defaultOptions[i] = userOptions[i]; 
     } 
    } 

    // Declare variables 
    var maxLimit = defaultOptions.maxLimit; 
    var minLimit = defaultOptions.minLimit; 
} 

This questionは私がやろうとしていたものと少し似ています。しかし、答えは、私が既に行ったようにオブジェクトのプロパティに1つずつアクセスすることを提案します。

このタスクを実行するより良い方法はありますか? forループ内の変数を宣言するか、更新されたオプションオブジェクトのプロパティを変数として抽出するのと同じですか?あなたがObject.assignを探しているよう

+1

それはあなたが達成しようとしているもの少し不明だ:代わりにあなただけのあなたも、物事をより簡潔にするためにdestructuring assignmentを使用することができ、通常の変数を望むとES6へのアクセス権を持っています。あなたが望む値を持つこの 'defaultOptions'オブジェクトを持っていれば、そのオブジェクトを通してそれらにアクセスするだけではどうですか? I.E.、 'maxLimit'にアクセスしているところでは、' defaultOptions.maxLimit'と書くだけです(ブラケット構文を使う必要はありません)。 –

+0

これはほとんどのライブラリ(jQueryやjQuery UIなど)の機能です。おそらく便宜のために頻繁に使用されるいくつかのオプションを除いて。 – Barmar

+0

'defaultOptions'のように長い名前を入力したくない場合は、' var do = defaultOptions; 'のような短い名前を付けることができます。それはちょうど 'do.maxLimit'です。 – Barmar

答えて

1

はそう、右の引数は左に、オブジェクトのプロパティを重ね上書き:

var config = Object.assign(defaultOptions, userSuppliedOptions); 
:のように使用することができ

console.log(Object.assign({ id: 1, name: 'Hello' }, { name: 'World' }));


If

let { minLimit, maxLimit } = defaultOptions; 
+0

彼の質問は、オブジェクトをマージする方法ではなく、普通の変数に割り当てることです。 – Barmar

+0

@Barmar - それを指摘してくれてありがとう、私はあなたが意味するものを参照してください。私はまだこれが普通の変数に割り当てるよりも良い解決策だと思っています。だから私は当分の間それを残すつもりです –

+0

これは彼の 'for'ループとは何が違うのですか? – Barmar

関連する問題