我有一个看起来像这样的数组
[["BR",1],["USA",2],["CH",3]]
我想把它转换成这样的东西
{"br":1,"usa":2,"ch":3};
任何线索?
谢谢你们
答案 0 :(得分: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有点容易出错,最好留给内置函数库和库。
答案 1 :(得分:1)
嗯,怎么样才能继续做下去?
result = {};
for( var i = 0; i < theArray.length; i++ ) {
result[theArray[i][0]] = theArray[i][1];
}
答案 2 :(得分: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对象,然后返回。
由于某些原因,上面的代码返回一个非常奇怪的对象,当我使用for-in循环它时,它返回Object构造函数中的所有方法/属性。
经过一段时间的尝试,我终于想出了更简单的版本,但其他用户在我之前使用过它。我不知道为什么,但这次我花了一段时间才以简单的方式看到问题(意识到数组的每个元素只有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]
答案 3 :(得分: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);