массив если в дочернем workControl == intermediate
Массив
[
{
"id": 0,
"title": "Базовая часть",
"content": []
},
{
"id": 1,
"title": "Профильная часть",
"placeholder": "Профильная часть",
"content": [
{
"id": 2,
"title": "intermediate current",
"content": [
{
"id": 3,
"title": "intermediate current",
"content": [
{
"id": 4,
"title": "intermediate current",
],
"workControl": [
"intermediate",
"current"
],
"content": []
}
]
}
]
},
{
"id": 22,
"title": "нету",
"content": [
{
"id": 23,
"title": "нету",
"content": [
{
"id": 24,
"title": "нету",
"workControl": [],
"content": []
}
]
}
]
}
]
}
]
Код который сообразил
currentControl(){
let currentControl = [];
let arr = [];
if(toRaw(this.getSteps[4].formData) !== undefined){
currentControl = toRaw(this.getSteps[4].formData.content).map(part => {
part.content.filter(elem => {
if(elem.content.length){
console.log('elee', elem.title)
elem.content.filter(elem2 => {
if(elem2.content.length){
console.log('el2', elem2)
elem2.content.filter(elem3 => {
console.log('el3', elem3)
if(elem3.workControl.filter(control => {
console.log('control', control)
if(control == 'intermediate'){
arr.push(elem3)
}
}))
return []
})
return []
}
})
return []
}
})
});
console.log('dddd', currentControl)
console.log('arrrrr', toRaw(arr))
return arr
}
}
что хочешь получить? результат какого вида? возможно это поможет подсказать быстрее, чем анализ кода
[ { "id": 4, "title": "intermediate current", "description": "ccccc", "placeholder": "zxczcx", "period": [ { "id": 6, "value": 6, "title": "6 недели" }, { "id": 4, "value": 4, "title": "4 недели" } ], "workControl": [ "intermediate", "current" ], "lectures": 0, "practice": 6, "homework": 0, "type": "practice", "content": [] } ]
Ты хочешь оставить только такие элементы, что где-то внутри в элементе есть intermediate===current?
type WorkControl = 'intermediate' | 'current' interface Item { workControl: WorkControl content: Item[] } function isCurrentDeep(item: Item) { if (item.workControl.includes('current')) return true if (item.content.length === 0) return false return item.content.some(nestedItem => isCurrentDeep(nestedItem)) } arr.filter(item => isCurrentDeep(item))
или тебе надо «дай мне все такие нижние элеметы, что workControl === current»?
Все нижние и их родители
https://codepen.io/itjustalance/pen/bGzdmLm
🙂 потратил час своей жизни https://codepen.io/salmasov/pen/qBgdQxY
хм, примерно такой вариант я видел с функцией внутри функции, но почемуто думал что можно в 3-4 строчки уложиться. Но видимо никак. Спасибо, помогли
Если в computed делаешь такое вычисление, то еще надо результат скопировать
Засуну в tools.js и в computed буду вызывать тогда
Обсуждают сегодня