Нужно вывести узел с макс/мин значением.
Как это сделать чистыми функциями?
Как сделать рекурсивную функцию, чтобы она возвращала узел?
var obj={value:14,children:[{value:33,children:[{value:9,children:[{value:35},{value:69},{value:6}]},{value:47,children:[{value:4}]},{value:52,children:[{value:74},{value:55}]}]},{value:88,children:[{value:71,children:[{value:35}]},{value:6,children:[{value:74}]},{value:26,children:[{value:80},{value:42}]}]}]};
const minValue = obj =>
Math.min(obj.value, ...(obj.children || []).map(minValue));
const maxValue = obj =>
Math.max(obj.value, ...(obj.children || []).map(maxValue));
const showNode = obj => console.log(obj);
const isRight = (obj, someValue) => obj.value === someValue;
const req = objItem => {
(objItem.children || []).map(req);
if (isRight(objItem, minValue(obj))) {
showNode(objItem);
}
if (isRight(objItem, maxValue(obj))) {
showNode(objItem);
}
};
req(obj);
//console.log(maxNode(obj));
//console.log(minNode(obj));
Для вывод узла - не обязательно сначала искать значение, а потом по значению опять искать узел. Достаточно сразу возвращать узел целиком, а не одно его поле.
Например:
var obj={value:14,children:[{value:33,children:[{value:9,children:[{value:35},{value:69},{value:6}]},{value:47,children:[{value:4}]},{value:52,children:[{value:74},{value:55}]}]},{value:88,children:[{value:71,children:[{value:35}]},{value:6,children:[{value:74}]},{value:26,children:[{value:80},{value:42}]}]}]};
const minNode = obj =>{
const minChild = (obj.children||[]).map(minNode).reduce((a,b)=>a.value<b.value?a:b,{value:Infinity});
return obj.value < minChild.value ? obj : minChild;
};
const maxNode = obj =>{
const maxChild = (obj.children||[]).map(maxNode).reduce((a,b)=>a.value>b.value?a:b,{value:-Infinity});
return obj.value > maxChild.value ? obj : maxChild;
}
console.log(maxNode(obj));
console.log(minNode(obj));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я ожидаю что когда массив пустой он будет показывать Hello worldНо он этого не делает
Мне нужно нарисовать красивую заштрихованную стрелку блока, используя SVG из одной точки (x0, y0) в другую (x1, y1), как показано на рисунке
На странице есть несколько блоков, я прохожусь по каждому с помощью кода: