Javascript 打字稿。在嵌套对象中动态添加属性
是否可以在Typescript中向嵌套对象动态添加属性?因为我的对象是动态的。有一次我有objJavascript 打字稿。在嵌套对象中动态添加属性,javascript,typescript,lodash,Javascript,Typescript,Lodash,是否可以在Typescript中向嵌套对象动态添加属性?因为我的对象是动态的。有一次我有obj [ {someObject}, { prop1:1, columns: [ components: [ columns: [ components:[ { type: number, key: 'key1' },
[
{someObject},
{
prop1:1,
columns: [
components: [
columns: [
components:[
{
type: number,
key: 'key1'
},
{
type: textfield,
key: 'key2'
}
]
]
]
]
}
]
例如,对于键为key2的对象,我需要添加一些标志。在另一种情况下,我得到了无对象嵌套。是否存在用于此操作的任何示例lodash函数,或者我必须通过递归迭代此对象?您必须递归搜索。谢天谢地,这并不难实施:
const findAndUpdate = ($obj, $key, $val) => {
Object.keys($obj).includes($key) ?
$obj[$key] = $val
: Object.values($obj).forEach($nestedObj => findAndUpdate($nestedObj, $key, $val));
return $obj;
}
我用了这个物体。而不是lodash方法,以便在不同环境中轻松复制。此函数将接收初始对象、要更新的键以及要将其更新为的值
用法:
const foo = {
b: {
c: {
d: 5
}
}
}
findAndUpdate(foo, "d", 56);
console.log(foo) // -> { b: { c: { d: 56 } } } }
它检查关键帧是否存在于对象的当前层中。如果没有,那么我们为当前层中的每个对象再次调用该函数-将原始对象作为引用传入。如果它确实在当前图层中找到关键点,则它将更新引用指向的对象。最后,在堆栈被清除之后,我们返回原始的更新对象。显然,如果没有找到与最初传入的目标键匹配的键,那么对象将保持不变
如果需要更多自定义,可以将$val改为接受函数$func:
const findAndUpdate = ($obj, $key, $func) => {
Object.keys($obj).includes($key) ?
$obj[$key] = $func($obj[$key])
: Object.values($obj).forEach($nestedObj => findAndUpdate($nestedObj, $key, $val));
return $obj;
}
然后,您现在可以执行以下操作:
findAndUpdate(foo, "d", old => old+1 );
console.log(foo) // -> { b: { c: { d: 6 } } } }
这回答了你的问题吗?