出于纯粹的兴趣,我想以函数式风格实现这个命令式代码:
const _createArrayFromGroupObject = (groupObject) => {
if (Array.isArray(groupObject))
return groupObject
const array = []
for (const groupName in groupObject) {
array.push([groupName, createArrayFromGroupObject(groupObject[groupName])])
}
return array
}
我试图这样做,但我遇到了堆栈溢出,我不明白问题是什么:
const objToArray = (groupObj) =>
Object.keys(groupObj).reduce((arr, key) => [...arr, [key, objToArray(groupObj[key])]], [])
const createArrayFromGroupObject = (groupObj) =>
Array.isArray(groupObj) ? groupObj : objToArray(groupObj)
沙盒:
const objToArray = (groupObj) =>
Object.keys(groupObj).reduce((arr, key) => [...arr, [key, objToArray(groupObj[key])]], [])
const createArrayFromGroupObject = (groupObj) =>
Array.isArray(groupObj) ? groupObj : objToArray(groupObj)
const _createArrayFromGroupObject = (groupObject) => {
if (Array.isArray(groupObject))
return groupObject
const array = []
for (const groupName in groupObject) {
array.push([groupName, createArrayFromGroupObject(groupObject[groupName])])
}
return array
}
const groupObject = {"teacher":{"Peter":{"20":{"married":[{"name":"Peter","profession":"teacher","age":20,"maritalStatus":"married"},{"name":"Peter","profession":"teacher","age":20,"maritalStatus":"married"}]}},"Michael":{"50":{"single":[{"name":"Michael","profession":"teacher","age":50,"maritalStatus":"single"}]}}},"scientific":{"Anna":{"20":{"married":[{"name":"Anna","profession":"scientific","age":20,"maritalStatus":"married"}],"single":[{"name":"Anna","profession":"scientific","age":20,"maritalStatus":"single"}]}},"Rose":{"50":{"married":[{"name":"Rose","profession":"scientific","age":50,"maritalStatus":"married"}]}}},"politician":{"Anna":{"50":{"married":[{"name":"Anna","profession":"politician","age":50,"maritalStatus":"married"}]}}}}
console.log(_createArrayFromGroupObject(groupObject))
/* console.log(createArrayFromGroupObject(groupObject)) */



