1

オブジェクトの 1 次元配列があります。

var myArray = [ { record  : "value" ,
                  recod2  : "value" ,
                  record3 : "value"
                } ,
                { record  : "value" ,
                  record2 : "value"
                  record3 : "value"
                } ,
                .
                .
                .
              ] ;

これから、ギザギザの 2 次元配列 (配列の配列) を次のように作成します。

var result = [ [ {} , {} , {} , {} ] ,
               [ {} , {} , {} , {} ] ,
               [ {} , {} , {} , {} ] ,
               .
               .
               .
             ] ;

たとえば、最初の配列に 8 つのオブジェクトが含まれている場合、結果の配列は次のようになります。

var result = [ [ obj1 , obj2 , obj3 , obj4 ] ,
               [ obj5 , obj6 , obj7 , obj8 ] ,
             ] ;

for ループでこれを達成するにはどうすればよいですか?

4

3 に答える 3

2
var result = [], data = /* above object */;
for (var i = 0; i < data.length; i++){
  if (i % 4 == 0) result.push([]);
  result[Math.floor(i / 4)].push(data[i]);
}

トリックを行う必要があります。4 番目のオブジェクトごとに、新しい (ネストされた) 配列を開始し、それに要素を追加します。

出力 (8 つの要素を想定):

[
  [
    {"record": "value",
      "record2": "value",
      "record3": "value"},
    {"record": "value",
      "record2": "value",
      "record3": "value"},
    {"record": "value",
      "record2": "value",
      "record3": "value"},
    {"record": "value",
      "record2": "value",
      "record3": "value"}
  ],
  [
    {"record": "value",
      "record2": "value",
      "record3": "value"},
    {"record": "value",
      "record2": "value",
      "record3": "value"},
    {"record": "value",
      "record2": "value",
      "record3": "value"},
    {"record": "value",
      "record2": "value",
      "record3": "value"}
  ]
]
于 2013-08-27T19:37:56.737 に答える
1

実際に何か試したことはありますか?あなたの試みを示すいくつかのコードをいただければ幸いです。でも...

slice()JavaScript の配列オブジェクトが提供するメソッドを使用できます。

func transform2d( srcArray , modulus )
{
    var result = undefined ;
    if ( modulus > 0 )
    {
      result = [] ;
      for ( var i = 0 ; i < srcArray.length ; i+= modulus )
      {
        result.push( srcArray.slice( i , i+modulus ) ) ;
      }
    }
    return result ;
}

プロセスでソース配列を破棄してもかまわない場合は、次のsplice()メソッドも使用できることに注意してください。

func transform2d( srcArray , modulus )
{
    var result = undefined ;
    if ( modulus > 0 )
    {
      result = [] ;
      while ( srcArray.length > 0 )
      {
        result.push( srcArray.splice( 0 , modulus ) ) ;
      }
    }
    return result ;
}

副作用があるため、このsplice()アプローチは最適ではないと考えています。

どうやら、偉大な頭脳は同じように考えています。この回答も参照してください: https://stackoverflow.com/a/8495740/467473

于 2013-08-27T20:02:07.073 に答える