-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"]
    ];

这里我只提到了两个数组,但我使用了超过 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,本例b.length。然后对于每次迭代,我们将数组对象的值转换为附加到对象的多维字符串ab。同时确保每次迭代的值不是undefined. 在循环之后,我们将多维字符串转换为 JSON 对象JSON.parse

于 2013-07-17T16:22:13.330 回答
0

在 jquery 中,您可以像下面这样简单地使用:

$(a).each(function(n){ab[n]=[a[n],b[n]]; return true;});
于 2013-07-17T16:09:22.017 回答