有没有最聪明的方法来达到相同的结果?
简短说明:
routes = [
{ name: 'vehicle', activated: true},
{ name: 'userassignment', activated: true},
{ name: 'relations', activated: true},
{ name: 'journeys', activated: true},
{ name: 'expenses', activated: true}
];
任务-创建一个函数,该函数需要上面的数组和:
将所有成员属性“已激活”更改为false
将一个特定的“选择”成员设置为true(基于其“名称”)
如果“选择”是“旅程”或“费用”,则将它们设置为“真”,但还设置“关系”
真正的成员
我像下面的代码一样来做,但是我的前辈希望它更聪明。
highlightActiveRoute(array: any[], chosen: string) {
array.forEach(element => {
element.activated = false;
if (element.name === chosen) {
element.activated = true;
if (element.name === 'journeys' || element.name === 'expenses') {
this.routes[2].activated = true;
}
}
});
}
}
我不确定我是否可以更聪明地编写它,但是也许您可以:)非常感谢您的启发。
最佳答案
仅使用ArrayIterators(ECMAScript 2015)。使用以下代码,您不必担心数组中的任何元素是否会更改其位置:
highlightActiveRoute(array: any[], chosen: string) {
array.forEach(element=>{element.activated=false});
if(['journeys','expenses'].includes(chosen))
{
array[array.findIndex(element=>{return element.name==='relations'})].activated = true;
array[array.findIndex(element=>{return element.name==='expenses'})].activated = true;
array[array.findIndex(element=>{return element.name==='journeys'})].activated = true;
}
else
{
array[array.findIndex(element=>{return element.name===chosen})].activated = true;
}
return array;
}