2016-07-03 1 views
1

私はオブジェクトJavaScriptの関数から複数のキーと値をオブジェクトに追加するにはどうすればよいですか?

var foo = { 
    "prop1" : "value2", 
    "prop2" : "value3", 
    "prop3" : "value4" 
}; 

を持っていると私は一度に入力複数のキーと値のペアに1を可能にする機能を持つ方法をみたいです。この権利は

function propAndValAdder(){ 
    for (var i = 0; i < arguments.length; i++) { 
     foo[arguments[i]] = [arguments[i + 1]]; 
    } 
} 

です:

は今、私はこれを持っていますか?

+1

['Object.defineProperties()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties) –

+0

'foo [arguments [i]] = [引数[++ i]]; ' –

+0

foo [arguments [i]] = arguments [++ i]; ([]の1つのセットを取り除く) –

答えて

1

それは)割り当て線の値の周りの[]を取り除きます(これは、値を私たちが望まない配列にしています)。

修正コード:

var foo = { 
    "prop1" : "value2", 
    "prop2" : "value3", 
    "prop3" : "value4" 
}; 

function propAndValAdder(){ 
    for (var i = 0; i < arguments.length; i+=2) { 
     foo[arguments[i]] = arguments[i + 1]; 
    } 
} 

propAndValAdder("prop4","value5","prop5","value6"); 
console.log(foo); 

//オブジェクト{PROP1: "値2"、PROP2: "値3"、prop3: "value4"、prop4: "value4"、prop5: "value6"}

+0

ありがとう、ジェイソン、それは働いた! –

+0

私の喜び、受け入れてくれてありがとう –

0

あなたの情報をパラメータに渡し、ループを修正する必要があります。

修正されたバージョン:ちょうどスキップする必要があり、あなたは別のプロパティとして値を追加していない「I」(ように2を追加するためのループを変更する必要があります:あなたはほとんどそれは右だ

/** 
* Add properties and values to the object 
* @param {array} arguments An array where even are keys and odd are the values 
* @param {object} obj  [null] The object to add properties 
* @return {obj}   Return the object but not nessary since it's an object(references) 
*/ 
function propAndValAdder(arguments,obj) { 
    if (!obj) obj = {}; 
    if (arguments.join) //We valid this is an array 
     for (var i = 0; i < arguments.length; i += 2) 
     obj[arguments[i]] = arguments[i + 1]; 
    return obj; 
} 
+0

私は概念的に署名を逆転させると思います。おそらくfoo(obj/*、args * /)のようなもので、体の中では、関数のようなもので追加の引数の配列をキャプチャします。var args = Array.from(arguments).slice(1) – JonSG

+0

[ ] [around [arguments [i + 1]];または1要素の配列を割り当てることになります –

関連する問題