2016-08-10 16 views
-1

私は以下のように配列を構築しました。Javascriptで配列をマージするには?

var myArray = []; 
for(var i = 0; i < data.length; i++) 
{ 
    var product = data[i][0]; 
    var size = data[i][1]; 
    myArray.push({product:product, value:size}) 
} 

dataがどのように構築されたかは、範囲外です。 myArrayをループすると、console.logに次の結果が得られます。

for(var i = 0; i < myArray.length; i++) 
{ 
    var product = myArray[i].product; 
    var size = myArray[i].value; 
    console.log(product + ' => ' + size); 
} 

Shoe A => S 
Shoe A => M 
Shoe B => XS 
Shoe B => S 
Shoe B => M 
Shoe C => M 
Shoe C => LG 
Shoe D => S 
Shoe D => M 
Shoe D => LG 
Shoe D => XL 

次の結果を得るにはどうすればよいですか?

Shoe A => [S, M] 
Shoe B => [XS, S, M] 
Shoe C => [M, LG] 
Shoe D => [S, M, LG, XL] 

私はAJAXを使用してPHPハンドラにmyArrayを投稿する傾向があります。

+0

はあり「製品」の順序は重要ですか? – thefourtheye

+0

いいえ、製品の順番は関係ありません。 –

+0

解決策が見つからない場合、なぜ人々が投票したのですか? –

答えて

2

は、単一のループで所望の出力を得るために:

靴A => [S、M]

靴B => [XS、S、M]

靴C => M、LG]

靴D => [S、M、LG、XL]

この解決方法を試すことができます。配列の代わりにハッシュを使用します。 "商品名"、サイズ:

var myArray = {}; 

for(var i = 0; i < data.length; i++) 
{ 
    var product = data[i][0]; 
    var size = data[i][1]; 
    if(myArray[product] === undefined) { 
     myArray[product] = [] 
    } 
    myArray[product].push(size) 
} 
+0

} '' .reduce() 'このために作られた、他の表示された場合回答。 – Martin

0

新しいObjectにそれぞれの値を追加するためにArray.reduce()を使用することができるはずです。

[ 
    {product:'shoe a', value:'L'}, 
    {product:'shoe b', value:'M'}, 
    {product:'shoe b', value:'S'} 

].reduce(function(memo, item) { 
    var arr = memo[item.product] || []; 
    arr.push(item.value); 
    memo[item.product] = arr; 
    return memo 
}, {}) 
0

私はあなたがこのような構造を構築したいと思う:

AとBがある
var oData = { 
    A : [Some Sizes], 
    B : [Some Sizes] ... 
} 

あなたの製品。だから、あなたはあなたの最初のデータをループあなたが必要なときに:

var sSize = "size you want to add"; 
    if(oData[A] === undefined){ 
     oData.A = [sSize]; 
    }else{ 
     oData[A].push(sSize); 
    } 
0

あなたの出力配列リストは、この{名前のようなオブジェクトが必要です[{ "productSize"}]

外観例を、AAAは、出力配列

var aaa = []; 
     var names = []; 

     for(var i = 0; i < myArray.length; i++) 
     { 
       if(names.indexOf(myArray[i].product)>-1){ 
         for(var j=0; j< aaa.length; j++){ 
          if(aaa[j].name == myArray[i].product){ 
           aaa[j].size.push(myArray[i].value) 
          } 
        } 
      } 
      else{ 
       var ppp = {}; 
       ppp.name = ""; 
       ppp.size = []; 
       ppp.name = myArray[i].product; 
       ppp.size.push(myArray[i].value); 
       names.push(ppp.name); 
       aaa.push(ppp); 
      } 
     } 

     for(var i=0; i<aaa.length; i++){ 
     console.log(aaa[i]); 
     } 
関連する問題