我见过很多在对象上进行“深度Map”的解决方案,它们要么改变对象的键,要么改变对象的值,但不能同时改变两者。
例如,如果给定以下对象:
const obj = {
this: {
is_not: {
something: "we want to keep"
},
is: {
a: {
good_idea: 22
},
b: {
bad_idea: 67
},
c: [{
meh_idea: 22
}]
}
}
}
本质上,我希望能够用以下函数签名转换它:
const newObj = deepTransform(obj, iterator)
function iterator (key, value) {
if (key.endsWith("idea")) return { [key.replace("idea", "")]: value + 1}
else if (key === "is_not") return {}
else return {[key]: value}
}
运行deepTransform将导致一个看起来像这样的对象:
{
this: {
is: {
a: {
good: 23
},
b: {
bad: 68
},
c: [{
meh: 23
}]
}
}
}
如果有人能帮我创建这个函数,那就太棒了!如果它在引擎盖下使用lodash函数,我会非常高兴。
如果有不清楚的地方,请询问。谢谢!
1条答案
按热度按时间js81xvg61#
你可以使用lodash的
_.transform()
递归迭代对象/数组,并使用更新的键和值重建它们:修改迭代器a以返回一对[key,value],将使
_.toPairs()
冗余,并将简化代码: