【发布时间】:2019-07-19 07:31:57
【问题描述】:
我希望能够接受一个对象
const objectOriginal = {
nestedObject: {
someValue: 1
}
}
从上面创建一个新对象并将其值更改为
const newObject = {
nestedObject: {
someValue: 33
}
}
我有一个嵌套对象的大型对象作为我的原始对象,我想基于这个原始对象创建一个新对象。问题是我需要这两个对象不同,而不是来自同一个原型链。
为了解决这个问题,我创建了一个函数,将第一个对象转换为数组,过滤掉我需要更改的对象,更改值,推送到数组,然后创建一个新对象。
const originalObject = {
nested1: {
id: "nested1"
value: 1
},
nested2: {
id: "nested2"
value: 2
},
nested3: {
id: "nested3"
value: 3
}
}
const valueToChange = "nested1"
const createNewObject = (originalObject, valueToChange) => {
const originalObjectToArray = Object.values(originalObject)
const temporaryArray = originalObjectToArray.filter(object => object.id !== valueToChange)
const newNestedObject = {
id: valueToChange,
value: 33
}
temporaryArray.push(newNestedObject)
const newAndDifferentObject = {}
for (let obj of temporaryArray) {
newAndDifferentObject[obj.id] = obj
}
return newAndDifferentObject
}
这个方案行得通,但我觉得一定有更好的方法来实现这个?如果我想创建一个新的和不同的对象,我不应该(至少我不希望)将它更改为一个数组,只是为了将其更改回一个对象。任何建议将不胜感激。
【问题讨论】:
-
通读建议的副本。 IMO 我更喜欢使用
const myCopy = JSON.parse(JSON.stringify(source));来制作副本。 -
也许你想要immutablejs之类的东西
标签: javascript node.js object prototype