Tengo una matriz de objetos con árboles de categorías que contienen matrices secundarias. Cada categoría tiene una propiedad deshabilitada que puede ser verdadera o falsa. Necesito recopilar una matriz de todas las identificaciones de los padres que deben configurarse como deshabilitadas como verdaderas si la mayoría de los niños de la parte inferior han deshabilitado como verdaderas.
[ { Category: { id: "69", createdAt: "2022-05-24T09: 54: 27.104Z", updatedAt: "2022-05-25T10: 36: 14.168Z", name: "Jewelry", key: "prykrasy", description: "Прикраси", disabled: false, mpath: "69.", children: [ { Category: { id: "70", createdAt: "2022-05-24T09: 54: 27.109Z", updatedAt: "2022-05-25T10: 36: 14.156Z", name: "Accessories", key: "aksesyary-dlya-prykras", description: "Аксесуари для прикрас", disabled: false, mpath: "69.70.", children: [ ], }, Category: { id: "71", createdAt: "2022-05-24T09: 54: 27.115Z", updatedAt: "2022-05-25T10: 36: 14.156Z", name: "Silver", key: "bizhuteriya", description: "Silver", disabled: false, mpath: "69.71.", children: [ ], }, Category: { id: "72", createdAt: "2022-05-24T09: 54: 27.121Z", updatedAt: "2022-05-25T10: 36: 14.168Z", name: "jlewelry-stuff", key: "uvelirni-vyroby", description: "Ювелірні вироби", disabled: true, mpath: "69.72.", children: [ ] } } ] } } ]
Creé una función para verificar el objeto Category
por dos cosas:
children
?Para el caso 1, almacena la identificación en una variable a la que puede acceder. Para el caso 2, ejecuta la misma verificación para los objetos Categoría secundarios.
const allDisabled = []; // stores the ids const checkChildren = (category) => { let disabledCount = 0; for (let i = 0; i < category.children.length; i++) { const ctg = category.children[i].Category; // child category if (ctg.disabled) { disabledCount++; } if (ctg.children.length) { checkChildren(ctg); } } if (disabledCount === category.children.length) { // all children are disabled allDisabled.push(category.id); } }
Ahora puede ejecutar esta función.
const categoriesArray = [...]; categoriesArray.forEach(item => checkChildren(item.Category));