我在es6问世之前就写了一些游戏代码,它的所有有益功能都出来了,比如reduce,map,filter,foreach
等等。
在我的游戏代码中,我多次使用传统的for
循环,并执行许多内部的for
循环来更改设置。 我可以用下面的代码和这些更新的函数(如reduce
)做同样的事情吗?
var i;
for (i = 0; i < gameData.inventoryBox.length; i++) {
if (gameData.inventoryBox[i].ID == param1) {
var k;
for (k = 0; k < gameData.inventoryBox[i].toDoListDetails.lists.length; k++) {
if (gameData.inventoryBox[i].toDoListDetails.lists[k].id == param2) {
var x;
for (x = 0; x < gameData.inventoryBox[i].toDoListDetails.lists[k].items.length; x++) {
if (gameData.inventoryBox[i].toDoListDetails.lists[k].items[x].id == param3) {
gameData.inventoryBox[i].toDoListDetails.lists[k].items[x].status = param4;
}
}
}
}
}
}
从我所看到的大多数用例scenerios来看,reduce
只有在创建新的数据数组而不是修改直接源(在本例中是“GameData”)时才有用。 我是不是还是坚持我已经有的东西比较好?
您可能可以链接过滤器和forEaches来测试条件。 应该是这样的:
gameData.inventoryBox
.filter(a => a.ID == param1)
.forEach(x => {
x.toDoListDetails.lists
.filter(b => b.id == param2)
.forEach(y => {
y.items
.filter(c => c.id == params3)
.forEach(z => {
z.status = param4;
}
}
};
您可以使用这个forEach循环
gameData.inventoryBox.forEach((inventory) => {
if(inventory.id === param1){
item.toDoListDetails.lists.forEach(list => {
if(list.id === param2){
list.items.forEach(item => {
if(item === param3){
item.status = param4
}
})
}
})
}
})