"descr": "Bar"
. def getDescriptionChain(subCats, id):
for subCat in subCats:
if subCat["id"] == id:
return [subCat["descr"]]
else:
chain = getDescriptionChain(subCat["sub_cats"], id)
if len(chain) > 0:
return [subCat["descr"]] + chain
return []
import json
subCatsRaw = """
[
{
"parent_id": null,
"sub_cats": [
{
"parent_id": 472,
"descr": "D",
"level": 1,
"id": 508,
"order": 0,
"sub_cats": [
{
"parent_id": 472,
"sub_cats": [
{
"parent_id": 508,
"sub_cats": [
],
"descr": "FOO",
"level": 2,
"id": 1076,
"order": 0
}
],
"descr": "Bar",
"level": 1,
"id": 345,
"sub_cats_ids": [
]
}
]
},
{
"parent_id": 472,
"descr": "E",
"level": 1,
"id": 490,
"order": 1
}
],
"descr": "A",
"level": 0,
"id": 472,
"order": 0
},
{
"parent_id": null,
"sub_cats": [
],
"descr": "B",
"level": 0,
"id": 544,
"order": 1
}
]
"""
subCats = json.loads(subCatsRaw)
print(" > ".join(getDescriptionChain(subCats, 1076))) # A > D > Bar > FOO
var
она появляется в глобальной области видимости. Также при использовании ключевого слова var
возможно повторное объявление.let
создаёт переменную только внутри того блока, в котором происходит это объявление. Повторное объявление запрещено.for
на каждой итерации создаёт новую переменную и присваивает ей новое значение (рассчитанное из предыдущего).var
реального создания новой переменной не происходит, если в цикле создаются функции, то в их замыкания попадает всегда одна и та же переменная.let
каждый раз возникает новая переменная, поэтому у каждой функции, созданной в цикле, в замыкании будет своя переменная со своим значением.