如何用嵌套字段的内容替换对象字段?

时间:2018-06-27 19:29:39

标签: javascript ecmascript-6

这是我的对象,需要修改:

const doc = { 
  _id: 'ZjenyEXyLChbksHqL',
  content: {
    en: [
      { 
        content: 'Content',
        timestamp: 1518811796,
        reviewed: { 
          user: '5b0b9e1153e8a750642e9caf',
          timestamp: 1518811796
        },
        finalized: { 
          user: '5b0b9e1153e8a750642e9caf',
          timestamp: 1518811796
        }
      }
    ]
  },
  reference: [ 'hp9v53uQqQPRXSYAi' ],
  main: 'XN7iqmCFD4jpgJZ6f'
}

我需要用en数组的第一个对象替换内容对象。

结果应如下所示:

{ 
  _id: 'ZjenyEXyLChbksHqL',
  content: 'Content',
  reviewed: { 
    user: '5b0b9e1153e8a750642e9caf',
    timestamp: 1518811796
  },
  finalized: { 
    user: '5b0b9e1153e8a750642e9caf',
    timestamp: 1518811796
  },
  reference: [ 'hp9v53uQqQPRXSYAi' ],
  main: 'XN7iqmCFD4jpgJZ6f'
}

我的尝试如下:

const language = 'en'
const data = (doc && doc.content && doc.content[language] && doc.content[language][0]) || {}
doc.content = data.content
doc.reviewed = data.reviewed
doc.finalized = data.finalized

感觉不太优雅。我不能使用传播算子或类似的东西吗?

我的问题还在于,reviewedfinalized是可选的。在那种情况下,我不想设置该键。 在我的代码中,我得到了finalized: undefined

2 个答案:

答案 0 :(得分:2)

b = copy.deepcopy(a)

您可以使用Object.assign复制所有值。使用实用程序可能会更优雅:

Object.assign(doc, ((doc.content || {})[language] || [{}])[0])

答案 1 :(得分:0)

是的,您可以使用点差运算符。

const data = (doc && doc.content && doc.content[language] && doc.content[language][0]) || {}

const newDoc = {
    ...doc,
    ...data
}