javascript之数组和对象的数据结构转换

最近学到对象和数组的相关知识,将遇到的两道较复杂的练习题贴出来 

var scoreObject = {
    "Tony": {
        "Math": 95,
        "English": 79,
        "Music": 68
    },
    "Simon": {
        "Math": 100,
        "English": 95,
        "Music": 98
    },
    "Annie": {
        "Math": 54,
        "English": 65,
        "Music": 88
    }
};

以上是一个含有比较规则子对象的对象,要将它转换为二维数组,以下是代码

// 对象转化为数组
function obj2array() {
    var oArray1=[];
    for(var el in scoreObject){
        var oArray=[];
            oArray.push(el);
            var obj = scoreObject[el];
            for(var childEl in obj) {//el为字符串
                oArray.push(obj[childEl]);
        }
        oArray1.push(oArray);
    }
    console.log(oArray1);
}
obj2array();
输出结果为[["Tony", 95, 79, 68],["Simon", 100, 95, 98],["Annie", 54, 65, 88]]

看过了对象转化为数组,再来看数组转化为对象,如下是实例数组,这是一个二维数组(准确地说这是含有子数组的一维数组,因为js中没有
所谓的之说)
var menuArr = [
    [1, "Area1", -1],
    [2, "Area2", -1],
    [3, "Area1-1", 1],
    [4, "Area1-2", 1],
    [5, "Area2-1", 2],
    [6, "Area2-2", 2],
    [7, "Area1-2-3", 4],
    [8, "Area2-2-1", 6],
];

代码如下:

//数组转化为对象
function array2obj(){
    var menuObject = {};
    //定义以下四个空对象用于存放不同的子对象,实属无奈之举
    var subMenu1 = {};
    var subMenu2 ={};
    var subMenu3 = {};
    var subMenu4 = {};
    for(var arr in menuArr){
        var array = menuArr[arr];
        switch (array[2]) {
            case -1:
                var index;
                index = array[0];
                menuObject[index] = {
                    "name": array[1],
               };break;
            case 1:
                subMenu1[array[0]] = {
                    "name":array[1],
                };
                menuObject[array[2]].subMenu = subMenu1;
                break;
            case 2:
                subMenu2[array[0]] = {
                    "name":array[1],
                };
                menuObject[array[2]].subMenu = subMenu2;
                break;
            case 4:
                subMenu3[array[0]] = {
                    "name":array[1],
                };
                subMenu1[array[2]].subMenu = subMenu3;
                break;
            case 6:
                subMenu4[array[0]] = {
                    "name":array[1],
                };
                subMenu2[array[2]].subMenu = subMenu4;
                break;
            default:
                break;
        }
    }
    console.log(menuObject);
}
array2obj();

这种方法有点复杂,若有简单方法请多多指教

猜你喜欢

转载自blog.csdn.net/line233/article/details/81950125
今日推荐