 
			
				12.11.2018, 22:42
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.11.2018 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Перебор вложенных массивов объектов
			 
			
		
		
		
		Есть такое иерархическое дерево 
const graph = {
  value: 65, children: [{
    value: 15,
    children: [{
      value: 55,
      children: [{
        value: 85,
        children: [{
          value: 66,
          children: [{ value: 29 }, { value: 21 }]
        }]
      }]
    }]
  }]
};
Как можно, например, найти узел с максимальным/минимальным значением, с помощью map(), reduce(). Не могу понять как "копать" вглубь  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.11.2018, 23:07
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Тлен 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2010 
					
					
					
						Сообщений: 6,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Зачем там map или reduce - хз, а так - рекурсивно.) 
		
	
		
		
		
		
		
			
				__________________ 
				29375, 35 
 
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.11.2018, 23:40
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Epitough,
  
<script>
const graph = {
  value: 65, children: [{
    value: 15,
    children: [{
      value: 55,
      children: [{
        value: 85,
        children: [{
          value: 66,
          children: [{ value: 29 }, { value: 21 }]
        }]
      }]
    }]
  }]
};
let example = foo(graph);
function foo(elem) {
    let obj = {
        max: elem.value,
        min: elem.value
    };
    if (elem.children) {
        elem.children.map(foo).forEach(
            function(o) {
                obj.max = Math.max(obj.max, o.max);
                obj.min = Math.min(obj.min, o.min);
            }
        );
    }
    return obj;
}
document.write(JSON.stringify(example))
  </script>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.11.2018, 00:23
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.03.2013 
					
					
					
						Сообщений: 1,572
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		в некоторых задачах можно (эх не красиво), но кода то мало, сейчас камни полетят    
<script>
const graph = {
  value: 65, children: [{
    value: 15,
    children: [{
      value: 55,
      children: [{
        value: 85,
        children: [{
          value: 66,
          children: [{ value: 29 }, { value: 21 }]
        }]
      }]
    }]
  }]
};
const arr = JSON.stringify(graph).match(/(-?\d+)/g);
document.write(`Min: ${Math.min(...arr)}, Max: ${Math.max(...arr)}`)
 </script>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.11.2018, 17:23
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.11.2018 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 А что делает map без функции, но с аргументом. Или это, получается, рекурсия? foo не вызывается, а становится функцией callback для map? Правильно понимаю? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.11.2018, 17:43
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Epitough, 
 ... обычный map с функцией ... 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.11.2018, 17:47
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Epitough
			
		
	 | 
 
	| 
		 с помощью map(), reduce().
	 | 
 
	
 
 
<script>
const graph = {
    value: 65, children: [{
        value: 15,
        children: [{
            value: 55,
            children: [{
                value: 85,
                children: [{
                    value: 66,
                    children: [{ value: 29 }, { value: 21 }]
                }]
            }]
        }]
    }]
};
let example = foo(graph);
function foo(elem) {
        let obj = {
                max: elem.value,
                min: elem.value
        };
        if (elem.children) {
                elem.children.map(foo).reduce(
                        function(obj,o) {
                                obj.max = Math.max(obj.max, o.max);
                                obj.min = Math.min(obj.min, o.min);
                                return obj
                        }, obj
                );
        }
        return obj;
}
document.write(JSON.stringify(example))
    </script>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.11.2018, 20:18
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.03.2013 
					
					
					
						Сообщений: 1,572
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
<script>
const graph = {
    value: 65,
    children: [{
        value: 15,
        children: [{
            value: 55,
            children: [{
                value: 85,
                children: [{
                    value: 66,
                    children: [{
                        value: 29
                    }, {
                        value: 21
                    }]
                }]
            }]
        }]
    }]
};
const foo = data => {
    let arr = [data.value]
    while (data.children) {
        data = data.children.pop();
        arr.push(data.value)
    }
    return `Min: ${Math.min(...arr)}, Max: ${Math.max(...arr)}`
}
document.write(foo(graph))
</script>
циклом while можно заменить любую рекурсию 
вот и спрашивается зачем здесь map(), reduce()?    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.11.2018, 20:35
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.12.2016 
					
					
					
						Сообщений: 3,650
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Poznakomlus
			
		
	 | 
 
	| 
		циклом while можно заменить любую рекурсию
	 | 
 
	
 
 Прямо таки любую?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.11.2018, 20:59
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.10.2016 
					
					
					
						Сообщений: 1,013
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Poznakomlus
			 
		
	 | 
 
	
		
<script>
const graph = {
    value: 65,
    children: [{
        value: 15,
        children: [{
            value: 55,
            children: [{
                value: 85,
                children: [{
                    value: 66,
                    children: [{
                        value: 29
                    }, {
                        value: 1
                    }]
                }, {value: 888}]
            }]
        }]
    }]
};
const foo = data => {
    let arr = [data.value]
    while (data.children) {
        data = data.children.pop();
        arr.push(data.value)
    }
    return `Min: ${Math.min(...arr)}, Max: ${Math.max(...arr)}`
}
document.write(foo(graph))
</script>
 
циклом while можно заменить любую рекурсию 
вот и спрашивается зачем здесь map(), reduce()?  
	 | 
 
	
 
 не сразу понял как тут без рекурсии обошлось ) 
этот цикл не заходит в чилды элементов, которые сами по себе не последние чилды. 
чуть поменял данные, можно увидеть баг - минимум неверный  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |