遍历对象的方法
推荐使用Object.keys()先获取键值,再遍历键值获取对象(其他for..in..不再列举)
原因:是Object.keys()返回键值的数组,只包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)
let OBJ = { firstLine: '粉身碎骨浑不怕,要留清白在人间', secondLine: '八脉会流入气海,意守一念力如山', thirdLine: '格物致知', forthLine: '田园将芜胡不归,既自以心为形役,奚惆怅而独悲', fifthLine: '实迷途其未远,觉今是而昨非', } Object.keys(OBJ).forEach(key => { console.log('OBJ[key]', OBJ[key]) }) // VM5910:2 OBJ[key] 粉身碎骨浑不怕,要留清白在人间 // VM5910:2 OBJ[key] 八脉会流入气海,意守一念力如山 // VM5910:2 OBJ[key] 格物致知 // VM5910:2 OBJ[key] 田园将芜胡不归,既自以心为形役,奚惆怅而独悲 // VM5910:2 OBJ[key] 实迷途其未远,觉今是而昨非 // undefined
最近有个奇怪的需求,要求展示某个对象所有的key,普通key之间用点连接,遇到数组用[i]连接,所有就有了下面这个方法:
let cb = (val, str) => { Object.keys(val).forEach(key => { let tmp = val[key] let strT = str // 数组 if (tmp && typeof tmp === 'object' && tmp.length) { let strTT = !strT ? key + '[i]' : strT + '.' + key + '[i]' cb(tmp[0], strTT) } else if (tmp && typeof tmp === 'object') { // 对象 let strTT = !strT ? key : strT + '.' + key cb(tmp, strTT) } else { let strTT = !strT ? key : strT + '.' + key arr.push({ value: strTT, bool: true }) } }) } cb(obj, '')
哈哈,不知道会不会有人也会遇到这样的需求哈....
下面这些地方是变量标识符,不要弄混了