-1

次のような複数の配列があります。

    var a=[1,2,3,4,5,6,7,8,9];

    var b=["a","b","c","d","e","f","g","h","i","j"];

しかし、以下のように配列を配列オブジェクトに変換する必要があります:

    ab=[
        ["1","a"],
        ["2","b"],
        ["3","c"],
        ["4","d"],
        ["5","e"],
        ["6","f"],
        ["7","g"],
        ["8","h"],
        ["9","i"]
    ];

ここでは 2 つのアレイについてのみ言及しましたが、6 つ以上のアレイを使用しています。

JSON オブジェクトとして変換する方法

4

3 に答える 3

3
for (var i = 0; i < a.length; i++) {
  ab[i] = [a[i], b[i]];
}

underscore には、任意の数の引数に対してこのタスクを実行する「zip」と呼ばれるメソッドがあります。以下は、広範囲にテストされていない大まかな実装です。

function zip() {
  if ( ! arguments.length ) {
    return [];
  } 
  var result = [];  
  for (var i = 0; i < arguments[0].length; i++) {
    result[i] = [];
    for (var j = 0; j < arguments.length; j++) {
      result[i][j] = arguments[j][i];
    }
  }
  return result;
}

var ab = zip(a,b);
于 2013-07-17T15:46:40.660 に答える
2

パーティーにはちょっと遅れましたが、これで仕事は終わりです

2つのアレイ

  var ab = "",
      a = [1, 2, 3, 4, 5, 6, 7, 8, 9],
      b = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
      x = b.length,
      i = 0;
  for (; i < x; i++) {
      if (typeof a[i] == 'undefined' || typeof b[i] == 'undefined') continue;
      ab += '[' + a[i] + ',"' + b[i] + '"],';

  }
  ab = JSON.parse("[" + ab.substr(0, --ab.length) + "]");

  // ab[0][0] === 1
  // ab[0][1] === 'a'
  // ab[0]    === [1, "a"]
  // ab       === [
  //                [1, "a"],
  //                [2, "b"],
  //                [3, "c"],
  //                [4, "d"],
  //                [5, "e"],
  //                [6, "f"],
  //                [7, "g"],
  //                [8, "h"],
  //                [9, "i"]
  //               ];

JSFIDDLEで試してみてください

a と b が同じ長さであると仮定すると、配列が json オブジェクトに変換されます。

6つのアレイ

このように、より多くの配列に対応するようにコードを拡張できます

  var ab = "",
      a = [1, 2, 3, 4, 5, 6, 7, 8, 9],
      b = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
      c = ["h", "i", "j", "k", "l", "m", "n", "o", "p", "q"],
      d = ["r", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
      e = ["s", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
      f = ["t", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
      x = b.length,
      i = 0;
  for (; i < x; i++) {
      if (typeof a[i] == 'undefined' || typeof b[i] == 'undefined') continue;
      ab += '[' + a[i] + ',"' + b[i] + '","' + c[i] + '","' + d[i] + '","' + e[i] + '","' + f[i] + '"],';

  }
  ab = JSON.parse("[" + ab.substr(0, --ab.length) + "]");

  // ab[0]    === [1, "a", "h", "r", "s", "t"]
  // ab[0][5] === "t" 
  // ab[0][3] === "h"

6 配列フィドル

説明

0から始まる配列オブジェクトの 1 つの長さまでの1 つのループを使用します (この場合は ) b.length。次に、反復ごとに、配列 object の値を object に追加された多次元文字列に変換しますab。各反復での値が ではないことを確認しながらundefined。ループの後、多次元文字列を JSON オブジェクトに変換します。JSON.parse

于 2013-07-17T16:22:13.330 に答える