【发布时间】:2021-03-08 20:39:28
【问题描述】:
我有以下两个有点不同的对象的情况:
const primary: PrimaryInterface = {
numbers: [1,2,3,4], // <= 5
other_numbers: [4,5,6,7], // <= 8
//tons of other array fields to merge
}
const child: ChildInterface = {
numbers: 5, //but be any number, even non unique
other_numbers: 8
//other fields, which have the same element stucture
}
现在我想合并child 值,直到primary 对象,作为primary[key].push(child[key])
听起来很简单,我编写了自己的函数来负责这种合并。但是由于我将我的代码重构为打字稿,所以我在直接通过键访问对象值时遇到了问题(通过对象 [键],这个问题说明了原因:Element implicitly has an 'any' type because expression of type 'string' can't be used to index)。
因此,与其重写我几乎所有的代码,我想,Lodash(或任何其他熟悉的对象/数组操作库)及其方法可能是有用的。我在 Lodash 中找到了 merge 方法,它对我的情况有用吗?
【问题讨论】:
-
我不知道您为什么需要使用 lodash,我假设您的代码类似于 this,可以使用一些 type assertions 进行编译。我不认为编译器可以保证没有字符串索引签名的任何迭代对象键的代码都是类型安全的,因此使用类型断言来消除编译器的警告可能是唯一的方法,除非你愿意使用属性名称的硬编码列表。我提供的代码对您有用吗?
-
@jcalz,是的,不止于此。实际上,您在这种情况下给了我一些不同的观点,因为在我自己的情况下,我正在使用
for (const [key, value] of Object.entries(object))。但说实话,实际情况比这要复杂一些,因为primary不是纯 JS 对象。这是一个mongoose文档。 (但我们不要考虑这个)而且,我更愿意将您的评论视为答案,因为它确实非常有用。
标签: javascript typescript lodash