我有一堆对象属性以点分隔的字符串形式出现,例如“availability_Meta.supplier.price”,我需要为记录[‘availability_Meta’] [‘供应商’] [‘价格’]分配相应的值,所以上.
并非所有东西都是3级深度:许多只有1级深度,而且许多深度超过3级.
有没有一种很好的方法在Javascript中以编程方式分配?例如,我需要:
["foo.bar.baz",1] // --> record.foo.bar.baz = 1 ["qux.qaz","abc"] // --> record.qux.qaz = "abc" ["foshizzle",200] // --> record.foshizzle = 200
我想我可以一起破解某些东西,但我没有任何好的算法,所以会很感激建议.我正在使用lodash,如果它有用,并对其他可以快速完成此工作的库开放.
编辑它在后端并且不经常运行,因此没有必要优化大小,速度等.实际上代码可读性对于未来的开发者来说将是一个加分.
编辑2这与引用的副本不同.也就是说,我需要能够为同一个对象多次执行此分配,并且“重复”答案将每次只覆盖子键.请重新开启!
解决方法
你在问题中提到了lodash,所以我想我应该添加他们的简单对象set()和get()函数.做一些像:
_.set(record,'availability_Meta.supplier.price',99);
你可以在这里阅读更多相关信息:https://lodash.com/docs#set
这些函数也可以让你做更复杂的事情,比如指定数组索引等:)