2017-06-07 8 views
0

特定のキーで配列またはjsオブジェクトを作成する必要があります。空の配列またはjsオブジェクトにプッシュする必要があります。その後、私は、そのキーに応じて、このようなものをいくつかの特定の値をプッシュする必要があります。キーを配列またはjavascriptオブジェクトにプッシュしますか?

var arr = ["john":["jval1","jval2"], "matt":["mval1","mval2","mval3"]] 

私はjsのオブジェクトまたは配列のためRIGT表記はありません知っているが、それはアイデアです。

これは私が何をしようとしている基本的には次のとおりです。

var keys = ["john","matt"];    //my keys 
var jvals = ["jval1","jval2"];   //my values for key john 
var mvals = ["mval1","mval2","mval3"]; //my values for key matt 

var arr = []; 

for(var i in keys) arr.push(keys[i]) //pushing the names (I need to push this names as keys so next lines should work) 

for(var i in jvals) arr["john"].push(jvals[i]) //Trying to push john values, which doesn't work because "john is not a key" 
for(var i in mvals) arr["matt"].push(mvals[i]) //Same. 

これがすべてでは動作しませんので、私はこれをどのようにしたらよいでしょうか?

答えて

1

これはあなたが望むのですか?

arrをオブジェクトとして宣言し、配列が空のキーを追加してからキーに移動します。ここ

var keys = ["john","matt"];    //my keys 
 
var jvals = ["jval1","jval2"];   //my values for key john 
 
var mvals = ["mval1","mval2","mval3"]; //my values for key matt 
 

 
var arr = {}; 
 

 
for(var i in keys) arr[keys[i]]=[]; 
 

 
for(var i in jvals) arr["john"].push(jvals[i]); 
 
for(var i in mvals) arr["matt"].push(mvals[i]); 
 

 
console.log(arr);

+0

はい、それです!タイはそんなに。 –

+0

うれしい。 @RobertoSepúlveda –

+0

確かに私はやりますが、6分を残してください –

0
var keys = ["john","matt"];    //my keys 
var jvals = ["jval1","jval2"];   //my values for key john 
var mvals = ["mval1","mval2","mval3"]; //my values for key matt 

var arr = {}; // not [] 

for(var i in keys) arr.[keys[i]] = []; //pushing the names (I need to push this names as keys so next lines should work) 

for(var i in jvals) arr["john"].push(jvals[i]) //Trying to push john values, which doesn't work because "john is not a key" 
for(var i in mvals) arr["matt"].push(mvals[i]) //Same. 
2

forEach

var keys = ["john","matt"];    //my keys 
 
var jvals = ["jval1","jval2"];   //my values for key john 
 
var mvals = ["mval1","mval2","mval3"]; //my values for key matt 
 
var object = {} 
 
    keys.forEach(function(key, index) { 
 
    object[key] = index == 0 ? jvals.slice() : mvals.slice() 
 
    }); 
 
console.log(object)

を使用して、コードの より短いバージョンあります
+0

OPのコードがしようとしているように、このコードは 'jvals'と' mvals'配列を_copy_しません。それらの配列を直接使用します。配列をコピーしたい場合は、 '...? 'forEach()'コールバック内の代入でjvals.slice():mvals.slice() 'を呼び出します。 –

+0

なぜアレイをコピーするのですか?将来価値が変わる可能性がありますか? – Sravan

+0

OPが実際に配列をコピーするのか、それとも単に参照を割り当てるのかが問題であるかどうかを言うために、OPが解決しようとしている実際の問題について十分なことはわかりません。実際のコードでは、これは大きな違いになる可能性があります。言いましたように、ソース配列が後で変更される場合、 'object'の内部に格納されている配列も変更されます。 OPのコードは配列をコピーするので、あなたの改善されたコードでコピーするのが最も安全でしょう。 –

関連する問題