Javascript 转换对象模型的最有效方法是什么?
我在前端有一个初始静态模型。看起来是这样的:Javascript 转换对象模型的最有效方法是什么?,javascript,ecmascript-6,Javascript,Ecmascript 6,我在前端有一个初始静态模型。看起来是这样的: [ { completed: false, id: 0, index: 0, isNavigationAllowed: true, name: 'Test1', }, { completed: false, id: 1, index: 1, isNavigationAllowed: f
[
{
completed: false,
id: 0,
index: 0,
isNavigationAllowed: true,
name: 'Test1',
},
{
completed: false,
id: 1,
index: 1,
isNavigationAllowed: false,
name: 'Test2',
},
{
completed: false,
id: 2,
index: 2,
isNavigationAllowed: false,
name: 'Test3',
},
]
简而言之,我的应用程序的行为就像一个向导页面,所以当用户单击“下一步”按钮时,我应该更改模型(并且不要改变它)。我使用以下转换函数:
function transformWizardStepsModelForNext(step, wizardStepsModel) {
return wizardStepsModel.reduce((accumulator, currentValue) => {
if (step === currentValue.index) {
let newValue = { ...newValue }
newValue.completed = true
newValue.isNavigationAllowed = false
return [...accumulator, newValue]
}
return [...accumulator, currentValue]
}, [])
}
我应该在每个用户单击“下一步”和“上一步”按钮时更改模型中的两个对象(无变化)。因此,在第一次单击之后,我应该更改:第一个对象的completed=true、isNavigationLowed=false字段以及第二个对象的isNavigationLowed=true字段。单击“上一步”按钮时,逻辑相同,但反之亦然。我已经为这个转换选择了reduce-array方法,但是看起来我只能处理一个对象。问题是:从您的角度来看,这里最有效的转换方式是什么?您可以使用map函数而不是reduce
wizardStepsModel.map(currentValue => {
if (step === currentValue.index) {
return {
...currentValue,
completed: true,
isNavigationAllowed: false
}
} else if (step + 1 === currentValue.index) {
return {
...currentValue,
isNavigationAllowed: true
}
}
else return currentValue
})
您可以使用map函数代替reduce
wizardStepsModel.map(currentValue => {
if (step === currentValue.index) {
return {
...currentValue,
completed: true,
isNavigationAllowed: false
}
} else if (step + 1 === currentValue.index) {
return {
...currentValue,
isNavigationAllowed: true
}
}
else return currentValue
})
我应该在第一个条件之后更改两个对象only@vmstr那么,在这段代码中,您认为有多少个对象在改变?但实际上,这里的逻辑有点难-在第二次“下一步”单击后(步数将增加1),我应该为第二个对象设置“complete=true”,为第一个对象设置“complete=false”,IsNavigationLowed=两者均为false。对于第三个,IsNavigationLowed=trueobject@vmstr我刚刚演示了一个如何有效地更改数组中的对象的示例,在我的时区,现在已经是晚上了,我对理解更改ATRIBUTESTHX的逻辑有些厌倦,祝您晚安,我会考虑如何使它工作我应该改变两个对象后,第一个条件only@vmstr那么,您认为这段代码中有多少个对象在更改?但实际上,这里的逻辑有点难-在第二次“下一步”单击后(步长计数器将增加1),我应该为第二个对象设置“complete=true”,对于第一个对象,“complete=false”,对于这两个对象,isNavigationLowed=false。对于第三个,IsNavigationLowed=trueobject@vmstr我刚刚演示了一个如何有效地更改数组中的对象的示例,在我的时区,现在已经是晚上了,我对理解更改ATRIBUTESTHX的逻辑有些厌倦,祝您晚安,我将考虑如何使其工作