如何从一个普通对象生成一个特定的对象,以便在mongodb $set参数中使用

ippsafx7  于 2023-06-05  发布在  Go
关注(0)|答案(1)|浏览(514)

如何在JavaScript中转换此对象:

let object = {
    a: {
        b: 12
        c: {
           d: 13
        }
    }
}

变成这样:

let object = {"a.b": 12, "a.c.d": 13}

我想修改对象,并在updateOne方法中使用它,就像mongodb中的$set参数一样

oxiaedzo

oxiaedzo1#

使用Object.entries来迭代每个使用flatMap的[key,value]对,并递归地到达对象树的叶子,建立到p数组中每个叶子的路径。找到叶子节点后,使用join将路径数组转换为点路径字符串。flatMap用于确保返回[key,value]对的平面数组,而不是嵌套数组。最后,我们使用Object.fromEntries将对列表转换为数组。

let data = {
  a: {
    b: 12,
    c: {
      d: 13
    }
  },
  e: {
    f: {
      g: 6
    }
  }
}

const f = (v, p=[]) => typeof v === 'object' ? 
  Object.entries(v).flatMap(([k, v]) => f(v, [...p, k])) : [[p.join('.'), v]]

console.log(Object.fromEntries(f(data)))

相关问题