Option1 Use an extra bool flag to break
extends Node2D
func _ready():
var grid = [
[1,2,3],
[4,5,6],
[7,null,9],
]
var filled = true
for row in grid:
var isBreak = false
for data in row:
if data == null:
filled = false
isBreak = true
break
if isBreak:
break
print(filled)
Option2 Use return
extends Node2D
func isFilled(array):
for row in array:
for data in row:
if data == null:
return false
return true
func _ready():
var grid = [
[1,2,3],
[4,5,6],
[7,null,9],
]
var filled = isFilled(grid)
print(filled)
Option3 flatten the array and use a single loop
(use append or append_array or +):
extends Node2D
func flatten1(array):
var result =[]
for row in array:
for data in row:
result.append(data)
return result
func flatten2(array):
var result =[]
for row in array:
result.append_array(row)
return result
func flatten3(array):
var result =[]
for row in array:
result+=row
return result
func _ready():
var grid = [
[1,2,3],
[4,5,6],
[7,null,9],
]
var filled = true
for element in flatten1(grid):
if element==null:
filled = false
break
print(filled)
(use reduce):
extends Node2D
func _ready():
var grid = [
[1,2,3],
[4,5,6],
[7,null,9],
]
var filled = true
for element in grid.reduce(func(acc, x): return x+acc):
if element==null:
filled = false
break
print(filled)
Option4 Just check if the entire grid is filled
(use reduce and has)
extends Node2D
func _ready():
var grid = [
[1,2,3],
[4,5,6],
[7,null,9],
]
var filled = !grid.reduce(func(acc, x): return x+acc).has(null)
print(filled)
Related link: Godot Engine 4.0 documentation:Array