Javascript 双重排列问题-摆脱Object.assign()
以下是我的reducer主体代码片段:Javascript 双重排列问题-摆脱Object.assign(),javascript,reactjs,ecmascript-6,ecmascript-next,Javascript,Reactjs,Ecmascript 6,Ecmascript Next,以下是我的reducer主体代码片段: const newState = { ...state, programs: { ...state.programs, ...Object.assign( {}, ...action.payload.map( (channelName) => ({
const newState = {
...state,
programs: {
...state.programs,
...Object.assign(
{},
...action.payload.map(
(channelName) =>
({
[channelName]: {
...state.programs[channelName],
selected: true
}
})
)
)
}
}
return newState
是否有机会摆脱对象。在这种情况下分配
将对象.assign({},a)
分配给{…a}
的经典建议在这种情况下不起作用,因为这里我们已经有了…action.payload.map
,因此它将导致。。。{…a}
它使spread生成类似数组的0,1,2键
有什么优雅的方法可以正确转换我的代码吗?听说过reduce
const action={
有效负载:['discoveryChannel']
}
常量状态={
计划:{
卡通网络:{
说明:“”,
时间:新日期()
},
发现频道:{
说明:“”,
时间:新日期()
}
}
}
常数newState={
……国家,
计划:{
…国家计划,
…action.payload.reduce(
(acc,channelName)=>{
acc[channelName]={
…state.programs[channelName],
所选:真
}
返回acc;
}, {})
}
}
console.log(newState)代码>听说过reduce
const action={
有效负载:['discoveryChannel']
}
常量状态={
计划:{
卡通网络:{
说明:“”,
时间:新日期()
},
发现频道:{
说明:“”,
时间:新日期()
}
}
}
常数newState={
……国家,
计划:{
…国家计划,
…action.payload.reduce(
(acc,channelName)=>{
acc[channelName]={
…state.programs[channelName],
所选:真
}
返回acc;
}, {})
}
}
console.log(newState)代码>使用对象的另一个选项。fromEntries
:
const action={
有效负载:['discoveryChannel']
}
常量状态={
计划:{
卡通网络:{
说明:“”,
时间:新日期()
},
发现频道:{
说明:“”,
时间:新日期()
}
}
}
常数newState={
……国家,
计划:{
…国家计划,
…Object.fromEntries(
action.payload.map(
channelName=>([
channelName,{…state.programs[channelName],已选择:true}
])
)
)
}
}
console.log(newState)代码>使用对象的另一个选项。fromEntries
:
const action={
有效负载:['discoveryChannel']
}
常量状态={
计划:{
卡通网络:{
说明:“”,
时间:新日期()
},
发现频道:{
说明:“”,
时间:新日期()
}
}
}
常数newState={
……国家,
计划:{
…国家计划,
…Object.fromEntries(
action.payload.map(
channelName=>([
channelName,{…state.programs[channelName],已选择:true}
])
)
)
}
}
console.log(newState)
可以在reduce循环中展开,但在本例中,对象。assign({},…对象数组)
是优雅的解决方案。可以在reduce循环中展开,但在本例中,对象。assign({},…对象数组)
是优雅的解决方案。完美的解决方案。现在我想知道reduce是否比Object.assign更具可读性,不过非常感谢。@EF如果您想让它更“可读”,请将reducer函数移出嵌套范围。完美的解决方案。现在我想知道reduce是否比Object.assign更具可读性,不过非常感谢。@EF如果您想让它更“可读”,请将reducer函数移出嵌套范围。非常感谢!这真是太美了。我在这附近徘徊,但是错过了通过从地图返回来生成条目对的最后一步…非常感谢!这真是太美了。我在这附近徘徊,但是错过了通过从映射返回条目对来生成条目对的最后一步。。。