-
慕虎7371278
您可以递归地构建对象任意数量的嵌套对象。因此,此功能与您的情况无关:var enrollment = {user: { id: 'string', name: 'string'},finished: 'boolean',path: 'boolean'}var enrollment2 = {user: { id: 'string', name: 'string'},test: { test1: { test2: { val0:'val0', test4: { //3rd level nested object for example val1: 'val1', val2: 'val2' } } }},finished: 'boolean',path: 'boolean'}const flat = (obj, out) => { Object.keys(obj).forEach(key => { if (typeof obj[key] == 'object') { out = flat(obj[key], out) //recursively call for nesteds } else { out[key] = obj[key] //direct assign for values } }) return out}console.log(flat(enrollment, {}))console.log(flat(enrollment2, {}))
-
慕尼黑5688855
我需要一些东西来避免重写原始对象中不同级别的同名键。所以我写了以下内容:const flattenObject = (obj, parentKey = '') => { if (parentKey !== '') parentKey += '.'; let flattened = {}; Object.keys(obj).forEach((key) => { if (typeof obj[key] === 'object' && obj[key] !== null) { Object.assign(flattened, flattenObject(obj[key], parentKey + key)) } else { flattened[parentKey + key] = obj[key] } }) return flattened;}var test = { foo: 'bar', some: 'thing', father: { son1: 'son1 value', son2: { grandchild: 'grandchild value', duplicatedKey: 'note this is also used in first level', }, }, duplicatedKey: 'note this is also used inside son2',}let flat = flattenObject(test);console.log(flat);// how to access the flattened keys:let a = flat['father.son2.grandchild'];console.log(a);还检查对象是否为空,因为我在使用时遇到了一些问题。
-
慕田峪7331174
使用递归和归约。请注意,如果 value 本身是一个包含对象的数组,您可能需要!Array.isArray(value)根据您的情况添加另一个检查function flatObj(obj) { return Object.entries(obj).reduce( (flatted, [key, value]) => typeof value == "object" ? { ...flatted, ...flatObj(value) } : { ...flatted, [key]: value }, {} );}