提问者:小点点

在编辑直接源代码时使用for循环


我在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”)时才有用。 我是不是还是坚持我已经有的东西比较好?


共2个答案

匿名用户

您可能可以链接过滤器和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
          }
        })
      }
    })
  }
})