JavaScript相关的数据格式转换


    var obj = {
        a: "b",
        b: { c: "d" },
      };
      /*
        {
            {label: 'a', value: 'b'},
            {label: 'b', value: {label:'c', value: 'd'}}
        }
      */
var obj = {
    a: "b",
    b: { c: "d"},
};
function changeObj(obj) {
    let newObj = [];
    for(let key in obj) {
        if(Object.prototype.toString.call(obj[key]) === '[object Object]') {
            const data = changeObj(obj[key]);
            newObj.push({
                label: key,
                value: data
            })
        }else {
            newObj.push({
                label: key,
                value: obj[key]
            })
        }
    }
    return newObj;
}
changeObj(obj);

最后的数据格式是这样的,没有对象里直接套对象的,都没有参数名

obj = [
    {label: 'a',value: 'b'},
    {label: 'b',value: [{label: 'c',value: 'd'}]}
]

或者是这样写:

var obj = {
    a: "b",
    b: { c: "d"},
};
function changeObj(obj) {
    const newObj = {};i = 0;
    for(let key in obj) {
        if(Object.prototype.toString.call(obj[key]) === '[object Object]') {
            const data = changeObj(obj[key]);
            newObj[i] = {
                label: key,
                value: data
            }
        }else {
            newObj[i] = {
                label: key,
                value: obj[key]
            }
        }
        i++;
    }
    return newObj;
}
changeObj(obj);

最后格式是这样的

obj = {
    '0': {label: 'a',value: 'b'},
    '1': {label: 'b',value: {'0': {label: 'c',value: 'd'}}}
}

抢答

递归,判断,添加。算法的话自己写,思路就是一层一层递归,判断是否为字符串或者对象


var obj = {
    a: "b",
    b: { c: "d" },
  };
  let arr = [];

  flat(obj, arr);
  function flat(obj, arr) {
    let vv = {}
    for (let key in obj) {
      let v = {};
      v.label = key;
      obj.show = true;
      if (Object.prototype.toString.call(obj[key]) == '[object Object]') { //判断为对象 接着处理
        v.value = flat(obj[key], arr);
      } else {
        v.value = obj[key];
      }
      arr.push(v);
      vv = v;
    }

    return vv;
  }

  console.log(arr)