百度前端试题---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]];
    }
}

 

 

 继续加油!!!

 

posted @ 2019-07-31 14:01  要事第一  阅读(166)  评论(0)    收藏  举报