百度前端试题---javascript 的居民----类型转换 对象转换成数组
将对象转成二维数组
思路----用的是比较笨的方法
1. 通过 for in 拿到 obj 的 key
2. 将 key 存放在一个数组中。获取 key.length ;这一步主要是得到 最终结果会存在几个 array; 另外,需要把 value[ n ] 设定为 array 类型;
3. 依次判断。如果 obj[key] 是 object 类型; 则通过 for in 循环之后。获取 obj[ key ][ z ] 的具体 值
4.把获取到的值 push 给 value[ n ]
5.最终就能得到 二维数组
var scoreObject = { "Tony": { "Math": 95, "English": 79, "Music": 68 }, "Simon": { "Math": 100, "English": 95, "Music": 98 }, "Annie": { "Math": 54, "English": 65, "Music": 88 } } let value = []; let x = []; function changeArray(obj){ for(let key in obj){ x.push(key); } let len = x.length; for(let i=0; i<len; i++){ value[i] = []; } for(let i=0; i<x.length;i++){ value[i].push(x[i]); if(typeof(obj[x[i]]) == "object"){ for(let z in obj[x[i]]){ value[i].push(obj[x[i]][z]); } } } console.log(value); } changeArray(scoreObject);
将数组转成对象
思路:
1.把所有的 数组都转成 obj ; 这个地方一定要注意; menuArr[ i ][ 0 ] 这个作为 id ;也是每个 obj 的 key 值;写成这个样子,是方便 obj [ key ] 去查找父元素
2. 根据 parent ID ; 给 拥有子节点的元素增加 subMenu 属性; 这部分需要注意,subMenu 一定要写 new Object() 否则报错;
3.倒叙;从最后一个子节点开始,填充他的父节点;然后删除该子节点 obj
4. 需要注意的是。subMenu [ key ] = obj 内容也是一个对象;
// 数组转成对象 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], ]; // subMENU 记录 parent id 组合 let subMENU = []; let len = menuArr.length; let obj = new Object(); for(let i=0;i<len; i++){ subMENU.push(menuArr[i][2]); obj[menuArr[i][0]] = new Object(); obj[menuArr[i][0]].name = menuArr[i][1]; } // parent 的集合 newMENU let newMENU = []; for(let i=0; i<subMENU.length; i++){ while(subMENU[0] == subMENU[1]){ subMENU = subMENU.slice(1); } while(subMENU[0] !== subMENU[1]){ newMENU.push(subMENU[0]); subMENU = subMENU.slice(1); } } // parent ID 降序排列 newMENU.reverse(); for(let i=0; i<newMENU.length; i++){ if(newMENU[i] >0) obj[newMENU[i]].subMenu = new Object() } // 从树枝开始找,填充树枝之后,删掉末端 obj ;一层一层去填充整个树 for(let i=len; i>0; i--){ if(menuArr[i-1][2] >0){ let par = menuArr[i-1][2]; obj[par].subMenu[menuArr[i-1][0]] = obj[menuArr[i-1][0]]; // 删除 obj delete obj[menuArr[i-1][0]]; } }
继续加油!!!