首页 > 解决方案 > 复杂对象的扩展语法

问题描述

假设我有一个像这样的对象

let store = {
  "articles": [{...}, {...}, ...],
  "errors": { "p1": { "myNewObject":0 }, "p2": {...}, ...}
}

我想利用Spread 语法来返回这个对象的克隆,其中store.errors.p1是一个新对象。以下是最简单的方法吗?

let newStore = { ...store, ...{ errors: { ...store.errors, p1: { "myNewObject":1 } } } }

标签: javascriptspread-syntaxecmascript-2018

解决方案


不,它不是克隆您的商店并进行深层复制的最简单语法p1,但它非常接近:

let newStore = { ...store, ...{ errors: { ...store.errors, p1: { myNewObject: 1 } } } }
//                         ^^^^                                                     ^
//                           |_______ not necessary ________________________________|

您可以删除多余的传播和括号周围errors

const store = { articles: [{ a: 1 }], errors: { p1: { myNewObject: 0 }, p2: { a: 1 } } }

const newStore = { ...store, errors: { ...store.errors, p1: { myNewObject: 1 } } }

console.log(JSON.stringify(store))
console.log(JSON.stringify(newStore))


推荐阅读