将数组转换为对象(指现有的Post)

时间:2018-03-08 15:02:04

标签: javascript arrays object

我指的是这个已回答的问题Convert Array into Object。特别是@ JVE999的答案。由于我的声望太低而无法对答案发表评论,我要问一个新问题。

我不明白这段代码。它在我的代码中就像一个魅力,但我根本不明白为什么。我是否可以简要了解每一行的内容以及它如何将数组实际转换为对象?

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;
}

2 个答案:

答案 0 :(得分:1)

因为我不确定你知道什么或不知道什么,所以我会尝试解释每一行:

var convArrToObj = function(array){使用单个参数array定义一个函数。

var thisEleObj = new Object();使用构造函数初始化一个新对象。 var thisEleObj = {};也有效。

if(typeof array == "object"){确保输入是数组或对象。如果您知道输入将是数组或对象并且您不需要递归(参见第5行),则不是绝对必要的。

for(var i in array){遍历对象中的每个“键”。在数组中,键都是数字的并且按数字顺序排列,因此for(var i=0;i<array.length;i++){将是仅支持数组的类似版本。

var thisEle = convArrToObj(array[i]);这是一个聪明的部分,可能是最不清楚的部分。它检查对象的目标属性(或数组的索引)是否为数组本身,如果是,则将其复制为对象。

thisEleObj[i]=thisEle是通过将thisEle(已转换的数组)复制到数组来“完成所有工作”的部分。

else { thisEleObj=array}无需处理数字类型(通常没有属性)或函数(具有不应处理的属性)等数据类型

由于递归,

return thisEleObj将处理后的对象输出到赋值/另一个函数/另一个自身调用。

希望这有帮助,告诉我是否需要澄清。

答案 1 :(得分:1)

它可以帮助你:))

    var convArrToObj = function(array){
    	    var thisEleObj = new Object();
    	    // when first time it checks for type [1, 2, 3, 4] it return object because type of a object return object
    	    if(typeof array == "object"){
    	        for(var i in array){
    	        	// here we are getting each item from array and calling same function convArrToObj(1) and this time will not be object so if condition get false and return same value from  else { thisEleObj = array; } and this value will assigned to a index of object
    	            var thisEle = convArrToObj(array[i]);
    	            thisEleObj[i] = thisEle;
    	        }
    	    }else {
    	        thisEleObj = array;
    	    }
    	    //and finaly thisEleObj will be object when recursive function get called variables inside function creates new scope so thisEleObj will not be override each time. In last when array finished loop final object will be returned yoc can check console()
console.log(thisEleObj);
    	    return thisEleObj;
    	}
    
    	convArrToObj([1, 2, 3, 4]);