提问人:Arif Ahmed 提问时间:11/1/2023 最后编辑:VLAZArif Ahmed 更新时间:11/1/2023 访问量:43
展平对象,获取控制台记录三次
Flatten the object gets the console logged thrice
问:
当我使用下面的代码来展平对象时,我记录了三次控制台。该对象是返回或控制台一个对象,即newObj
有人能告诉我我做错了什么吗?
数据输入
const data = {
id: 09,
email: '[email protected]',
contactInfo: {
name: 'Test1',
address: {
city: 'Berlin',
country: 'Germany'
}
}
}
在这里,我通过递归调用来展平对象。
const newObj = {}
const getFlattenObj = (data) => {
Object.keys(data).forEach(key => {
if (typeof data[key] === 'object') {
getFlattenObj(data[key]);
} else {
newObj[key] = data[key]
}
})
console.log(newObj);
}
getFlattenObj(data);
答:
3赞
Gabriele Petrioli
11/1/2023
#1
您正在记录 这是一个递归函数,因为当键的值是对象时,它会调用自己。getFlattenObj
所以最初的调用是一次,然后代码会遇到密钥并再次调用,所以另一个日志,然后第二次调用将遇到密钥并再次调用。所以 3 次调用是 3 个日志。contactInfo
getFlattenObj
address
getFlattenObj
getFlattenObj
您可以添加的另一个改进是不要对 使用全局变量,而是在方法中传递或创建它,这样您就可以多次重用该函数,而无需手动清除对象。newObj
const data = {
id: 09,
email: '[email protected]',
contactInfo: {
name: 'Test1',
address: {
city: 'Berlin',
country: 'Germany'
}
}
}
const getFlattenObj = (data, targetObject = {}) => {
Object.keys(data).forEach(key => {
if (typeof data[key] === 'object') {
getFlattenObj(data[key], targetObject);
} else {
targetObject[key] = data[key]
}
})
return targetObject;
}
const newObj = getFlattenObj(data);
console.log(newObj);
评论
console.log(newObj);
data
是三层深。console.log(newObj);
getFlattenObj(data);
newObj
;