基于路径合并JavaScript对象的最短路径

时间:2018-05-17 19:02:58

标签: javascript object lodash javascript-objects

任何人都知道如何进一步压缩我的mergePath方法,该方法根据键/值路径合并两个对象上的键?我的解决方案使用Lodash。

let obj1 = { z: {fields: { a: "200", b: "2" }}}
let obj2 = { z: {fields: { a: "2", b: "20" }}}
let objsPath = "z.fields"

let mergePath = (objsPath, obj1, obj2) => (
  _.set(obj1, objsPath, {..._.get(obj1, objsPath), ..._.get(obj2, objsPath)})
)

2 个答案:

答案 0 :(得分:1)

您可以使用_.merge()将路径从awk '{sum+=$1} END{print sum/FNR}' OFMT="%0.9g" Input_file 复制到obj2。然后,您可以返回obj2(我已使用comma operator):

obj1
const obj1 = { z: {fields: { a: "200", b: "2" }}}
const obj2 = { z: {fields: { a: "2", b: "20" }}}
const objsPath = "z.fields"

const mergePath = (objsPath, obj1, obj2) => (
  _.merge(_.get(obj1, objsPath), _.get(obj2, objsPath)), obj1
)

console.log(mergePath(objsPath, obj1, obj2));

答案 1 :(得分:1)

不使用外部库的最简单方法

const obj1 = { z: {fields: { a: "200", b: "2", c: "66" }}}
const obj2 = { z: {fields: { a: "2", b: "20" }}}

const mergedObj = {z: {fields: {}}}
Object.assign(mergedObj.z.fields ,obj1.z.fields, obj2.z.fields)

console.log(mergedObj)

另一种方法是使用对象扩展运算符,但需要babel preset才能使用此功能 - 这是将来的语法。 :) 该语法将类似于

const mergedObj = {
  z: {
    fields: {
      ...obj1.z.fields,
      ...obj2.z.fields
     }
   }
 }