2011-12-14 134 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);