比如有对象
a: { b: { c: { d: { f: 123 } } }}
我只能按照顺序拿到数组['a', 'b', 'c', 'd', 'f']
如果想给f赋值,
只能
expression[0][expression[1][expression[2][expression[3][expression[4]....]]]] = 456
如果想要写上面这个表达式的通用函数,要怎么写。
function setValue(object, path, value) { let current = object; for (let i = 0; i < path.length - 1; i++) { current = current[path[i]]; } current[path[path.length - 1]] = value;}let a = { b: { c: { d: { f: 123 } } }};let path = ['b', 'c', 'd', 'f'];setValue(a, path, 456);console.log(a.b.c.d.f); // 输出: 456
你直接看lodash的源码 https://www.lodashjs.com/docs/lodash.set
你项目里直接安装lodashjs也可以
或者直接去吧 set 方法的源代码拷贝到项目里就行了 没必要自己写
这个问题可以通过使用 JavaScript 中的递归函数来解决。以下是一个可能的解决方案:
function accessNestedObject(obj, path, value) { let keys = path.split('.'); let key = keys[0]; if (keys.length > 1) { obj[key] = {}; accessNestedObject(obj[key], keys.slice(1).join('.'), value); } else { obj[key] = value; } return obj;}let expression = { a: { b: { c: { d: { f: 123 } } } } };accessNestedObject(expression, 'a.b.c.d.f', 456);console.log(expression); // { a: { b: { c: { d: { f: 456 } } } } }
这个 accessNestedObject
函数接受三个参数:一个对象,一个包含要访问的属性的路径,以及一个要设置的值。该函数将路径拆分成键的数组,然后逐个访问这些键,并在每个级别创建一个新的对象,如果路径中还有更多的键。当到达最深层的键时,该函数会设置给定的值。然后该函数返回修改后的对象。
在上面的例子中,我们首先创建了一个名为 expression
的对象,然后使用 accessNestedObject
函数将 f
属性的值设置为 456
。然后我们打印出 expression
,可以看到 f
的值已经被成功更改。
[ {"fields":{"itemname":"aaa","qty":100},"billno":"a001"}, {"fields":{"itemname":"bbb","qty":300},"billno":"a002"}, {"fields":{"itemname":"ccc","qty":200},"billno":"a004"}, {"fields":{"itemname":"eee"
假设有个对象非常多层,要给某一层进行赋值,那么需要一层层判断是否为空,有没有优雅的写法? 示例 此时要给a对象的d属性赋值,就需要一层层判断非空才行...
如下代码中id="pop"滚动层,如何在滚动到最底部时再向上滚动不会变成滚动下层滚动内容?
我有一门java课 在上面的场景中,示例具有子示例,这又是示例列表。此嵌套可以是 n 级。我想实现的是有一个示例列表,即扁平化上面的对象并将所有示例收集到最终列表中(收集所有n级示例)。一个明显的方法是递归。在Java中有什么方法可以更有效地实现它。我尝试了一些java 8概念,但它们不符合要求。
嗨,伙计们,我有一个问题,从一开始,我会提到我已经尝试过这个和这个 我的情况如下。我有API,它发送给我 根目录处于组件状态! 我如何更新,,,,,与?最后一个约束是我不能更改root的名称(我不能将其重命名为newRoot等) 我尝试的是调用这个函数: 因此:
如上图所示,我想同时获取到person对象,要怎么做呢? 在线调试