2 回答
TA贡献1878条经验 获得超4个赞
您可以使用JSON.stringify(object)一个对象,而我刚刚编写了一个函数,它将以递归方式将数组转换为对象,例如this JSON.stringify(convArrToObj(array)),它是以下代码(可以在此答案上找到更多详细信息):
// Convert array to object
var convArrToObj = function(array){
var thisEleObj = new Object();
if(typeof array == "object"){
for(var i in array){
var thisEle = convArrToObj(array[i]);
thisEleObj[i] = thisEle;
}
}else {
thisEleObj = array;
}
return thisEleObj;
}
为了使它更通用,您可以重写该JSON.stringify函数,而不必担心它,只需将其粘贴在页面顶部即可:
// Modify JSON.stringify to allow recursive and single-level arrays
(function(){
// Convert array to object
var convArrToObj = function(array){
var thisEleObj = new Object();
if(typeof array == "object"){
for(var i in array){
var thisEle = convArrToObj(array[i]);
thisEleObj[i] = thisEle;
}
}else {
thisEleObj = array;
}
return thisEleObj;
};
var oldJSONStringify = JSON.stringify;
JSON.stringify = function(input){
return oldJSONStringify(convArrToObj(input));
};
})();
而现在JSON.stringify会接受arrays还是objects!(通过示例链接到jsFiddle)
编辑:
这是另一个效率更高的版本,尽管它的可靠性可能会也可能不太低(不确定-取决于是否JSON.stringify(array) 总是返回[],我看不出为什么不会返回,所以这个功能应该是更好,因为JSON.stringify与一起使用时,它的工作量少了一些object:
(function(){
// Convert array to object
var convArrToObj = function(array){
var thisEleObj = new Object();
if(typeof array == "object"){
for(var i in array){
var thisEle = convArrToObj(array[i]);
thisEleObj[i] = thisEle;
}
}else {
thisEleObj = array;
}
return thisEleObj;
};
var oldJSONStringify = JSON.stringify;
JSON.stringify = function(input){
if(oldJSONStringify(input) == '[]')
return oldJSONStringify(convArrToObj(input));
else
return oldJSONStringify(input);
};
})();
添加回答
举报