Javascript 从另一个对象创建新的不同对象的最佳方法

Javascript 从另一个对象创建新的不同对象的最佳方法,javascript,node.js,object,prototype,Javascript,Node.js,Object,Prototype,我想能够接收一个物体 const objectOriginal = { nestedObject: { someValue: 1 } } 从上面创建一个新对象,并将其值更改为 const newObject = { nestedObject: { someValue: 33 } } 我有一个嵌套对象的大对象作为我的原始对象,我想基于这个原始对象创建一个新对象。问题是我需要这两个对象是不同的,而不是来自同一个原型链 为了解决这个问题,我创建了一个函数,将第一个对象转

我想能够接收一个物体

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
}

这个解决方案可行,但我觉得必须有更好的方法来实现这一点?如果我想创建一个新的不同的对象,我不应该(至少我不希望)将其更改为数组,而只是将其更改回一个对象。任何建议都将不胜感激。

您的问题是两个变量都指向同一个对象(浅拷贝)。您所做的是深度复制,有一种更简单的方法是使用JSON:

function jsonCopy(src) {
    return JSON.parse(JSON.stringify(src));
}
将原始对象作为src传递,它会将其转换为JSON字符串并将其解析回一个对象,执行对象的深度复制并返回它。

为此,我将使用。我们创建一个新的空对象,指定原始对象的所有原始属性,然后指定新的嵌套对象。该方法将负责用新属性替换现有属性(请在此处阅读更多信息:)

const originalObject={
nested1:{id:“nested1”,值:1},
nested2:{id:“nested2”,值:2},
nested3:{id:“nested3”,值:3}
};
const createNewObject=(originalObj,valToChange,newVal)=>
{
const newObj={id:valToChange,value:newVal};
返回Object.assign({},originalObj,{[valToChange]:newObj});
};
//替换示例。
log(createNewObject(originalObject,“nested1”,33));
log(createNewObject(originalObject,“nested2”,99));
//新属性示例(未替换任何原始属性)

log(createNewObject(originalObject,“nested4”,44))通过建议的副本读取的可能副本。我更喜欢使用
constmycopy=JSON.parse(JSON.stringify(source))复制一份。也许你想要