最近学到对象和数组的相关知识,将遇到的两道较复杂的练习题贴出来
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();
这种方法有点复杂,若有简单方法请多多指教