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)