2011-12-14 96 views
1

我有一个看起来像这样转换双阵列JSON

[["BR",1],["USA",2],["CH",3]] 

数组,我想将其转换为这样的事情

{"br":1,"usa":2,"ch":3}; 

任何线索?

谢谢你们伙计

回答

2
var len = arr.length, i, hash = {}; 
for (i = 0; i < len; i++) { 
    hash[arr[i][0].toLowerCase()] = arr[i][1]; 
} 

这将转换成一个对象。您可以在较新的浏览器中使用JSON.stringify(hash),或者如果您使用像jQuery这样的库,可以将其设置为JSON字符串。自己编写JSON有点容易出错,最好将它留给内建函数库和库。

+0

这似乎工作,谢谢Amadan!将在短短几分钟内接受答案 – climboid 2011-12-14 04:40:08

1

那么,怎么样才能继续做下去呢?

result = {}; 
    for(var i = 0; i < theArray.length; i++) { 
     result[theArray[i][0]] = theArray[i][1]; 
    } 
+0

堆栈溢出不会让我批准,直到5分钟,现在...... – climboid 2011-12-14 04:43:13

+0

这是干净多了。 [x] – xx3004 2011-12-14 04:45:57

0

这不是正确答案!

在这里你去:

function toJSON($array) { 
    if ($array.constructor !== Array) return false; 
    var $res = {}; 
    for (var $subArray in $array) { 
     for (var $k in $array[$subArray]) { 
      $res[$k] = $array[$subArray][$k]; 
     }; 
    }; 
    return $res; 
}; 

//Example 
var test = [["BR",1],["USA",2],["CH",3]]; 
$JSON = toJSON(test); 

功能将检查类型的参数,如果它是一个数组, 功能将扫描并把它们放到一个JSON对象,然后返回。

由于种种原因,高于代码返回一个非常奇怪的物体,当我用换到循环,它返回的所有方法/在对象的构造属性..

一个同时努力,我终于之后想出更简单的版本,但其他用户在我使用之前已经使用过它。我不知道为什么,但是这次我花了一段时间才以简单的方式看到问题(意识到阵列的每个元素只有2个固定长度)。

function toJSON($array) { 
    if ($array.constructor !== Array) { return false; }; 
    var $result = {}; 
    for (var $i = 0; $i < $array.length; $i++) { 
     $result[$array[$i][0]] = $array[$i][1]; 
    }; 
    return $result; 
}; 

我希望能有所帮助。

[X]

0

这就是我想出了:

var arr = new Array(new Array('BR', 1), new Array('CN', 2)); 
var results = new Object(); 

for(var i=0; i< arr.length; i++) { 
    results[arr[i][0]] = arr[i][1]; 
} 
console.log(results);