js对象的扁平化
传入一个对象 获取他扁平后的对象 如果嵌套多层已.的方式呈现
设计思路 判断当层结构是不是对象并且不是空对象 满足条件递归 链接每次递归的key存放到数组里 在最后一层进行数组的join方法生成key
window.isobj = function isEmptyObject(elem) {
for (var key in elem) {
return false
}
return true
}
let aaa = {
a: {
b: {
l: 1212,
c: {
d: 6666
}
}
},
g: {
b: {
c: {
d: 5435,
h: []
}
}
},
e: {
x: 888
},
p: 999,
}
window.gettoobj = function gettoobj(obj, params, mykey, isgetstr) {
if (obj.__proto__.constructor === Object && !window.isobj(obj)) {
for (const key in obj) {
if (Object.hasOwnProperty.call(obj, key)) {
gettoobj(obj[key], params, mykey.concat(key), isgetstr)
}
}
} else {
isgetstr?params.push(mykey.join('/')):params[mykey.join('.')] = obj
}
return isgetstr ? params.toString() : params
}
console.log(aaa)
console.log(window.gettoobj(aaa, {}, [], false))
js字符串转对象
整体思路就是截取后 判断对象是否有这个key 没有就是空对象
let str = 'a/b/c,d/e/f,g/h/i,j/k/l'
let myobj = {}
function getobj(str) {
let arr = str.split(',')
arr.map(item => {
let list = item.split('/')
let obj = myobj
list.map(item => {
if (!obj[item]) {
obj[item] = {}
}
obj = obj[item]
})
})
return myobj
}
console.log(getobj(str))
js对象转字符串
和第一个方法一样 就写在了一起 传入的参数不一样
window.gettoobj = function gettoobj(obj, params, mykey, isgetstr) {
if (obj.__proto__.constructor === Object && !window.isobj(obj)) {
for (const key in obj) {
if (Object.hasOwnProperty.call(obj, key)) {
gettoobj(obj[key], params, mykey.concat(key), isgetstr)
}
}
} else {
isgetstr?params.push(mykey.join('/')):params[mykey.join('.')] = obj
}
return isgetstr ? params.toString() : params
}
console.log(window.gettoobj(getobj(str), [], [], true))
版权声明:本文为m0_56896206原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。