【发布时间】:2019-03-03 14:52:33
【问题描述】:
与镜头在函数式语言中的功能类似,JavaScript 中是否有一种方法可以返回一个与原始对象相同但修改了一些元素的新对象?
var myObject = {
label: 'Table',
options: ['legs'],
params: {
colour: 'red',
feet: {
colour: 'white',
shape: 'round'
}
}
}
function newObject(obj) {
// sought-after syntax here
return obj({ params.colour = 'green', params.feet.shape = 'square' })
}
console.log(newObject(myObject))
{
label: 'Table',
options: ['legs'],
params: {
colour: 'green',
feet: {
colour: 'white',
shape: 'square'
}
}
}
注意:newObject() 返回一个 new 对象,不会影响任何形状或形式的原始对象。
【问题讨论】:
-
它是一个普通的对象还是复杂的?另外,它是否有分配给它的任何函数,还是只是原语、数组和其他对象?
-
在 JavaScript 中没有直接支持,但当然可以实现代码来做这样的事情。
-
那将是一个仅由基元、数组和其他对象组成的对象
-
检查 immer 或 ramda 或不可变
-
JavaScript 功能强大,您可以编写自己的镜头
标签: javascript ecmascript-6 destructuring