这是我的对象,需要修改:
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
感觉不太优雅。我不能使用传播算子或类似的东西吗?
我的问题还在于,reviewed
和finalized
是可选的。在那种情况下,我不想设置该键。
在我的代码中,我得到了finalized: undefined
。
答案 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
}