【发布时间】:2018-01-29 09:52:23
【问题描述】:
注意:Object.assign 将不起作用,因为它只会进行浅拷贝。
查看 Ramda.js 的源代码
https://github.com/ramda/ramda/blob/v0.25.0/source/set.js
我正在寻找一个简单的函数,它将接受一个对象、一个路径和一个值并返回一个 new 对象。理想情况下,新副本尽可能高效。
https://www.youtube.com/watch?v=n5REbbvRYqQ&feature=youtu.be&t=15m3s
假设我有一个任意对象,可能是这个
const obj = {
a: {
b: {
c: 1
}
}
e: 4
}
函数产生的结果示例
const obj2 = func(obj,['a','b','c'],99)
console.log(obj2)
// {
// a: {
// b: {
// c: 99
// }
// }
// e: 4
//}
console.log(obj)
// {
// a: {
// b: {
// c: 1
// }
// }
// e: 4
//}
理想的解决方案是高效地创建一个新对象:https://www.youtube.com/watch?v=n5REbbvRYqQ&feature=youtu.be&t=15m3s
因此如果obj2.e = 5 则obj.e === 5 因为只有func 创建了正在修改的分支的副本,但保留了所有其他引用。
【问题讨论】:
标签: javascript object