 
			
				08.09.2016, 12:46
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.09.2016 
					
					
					
						Сообщений: 8
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Помогите начинающему программисту решить задание.
			 
			
		
		
		
		Try to complete below tasks as soon as you can, but ensure code quality first. Send each solution separately once ready. 
 
1. In JavaScript write a function reduce2 working the same as Array.reduce (use cycle): 
Array.prototype.reduce2 = function... ← Your code goes here 
function add(a, b) { return a + b } 
function mul(a, b) { return a * b } 
function foo(a, b) { return a.concat(b) } 
var a = [1, 2, 3, 4] 
console.log(a.reduce(add), a.reduce2(add))         // 10 10 
console.log(a.reduce(add, 10), a.reduce2(add, 10)) // 20 20 
console.log(a.reduce(mul), a.reduce2(mul))         // 24 24 
console.log(a.reduce(foo, ''), a.reduce2(foo, '')) // 1234 1234 
 
Hints: 
this[i] 
arguments.length 
 
2. Write the same reduce2 recursively (do not simulate a cycle through recursion) 
 
Hints: 
slice 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.09.2016, 16:34
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.07.2012 
					
					
					
						Сообщений: 49
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		С помощью цикла, как вариант 
http://codepen.io/mogafk/pen/EgjZKw?editors=0010
Это больше похоже на какое-то маленькое тестовое задание. Если так, то просить других людей это решить просто зашквар ужасный. Хотя это мог бы быть и видеоурок, но зачем тогда их смотреть если не можешь решить задания?  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось moron, 08.09.2016 в 16:39.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.09.2016, 16:43
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.09.2016 
					
					
					
						Сообщений: 8
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Да! Это было тестовое задание которое я не смог выполнить из за отсутствия опыта. Теперь я хочу спросить у опытных программистов как бы они его выполнили (на будущее мне). Я не смог найти достаточно информации про Reduce и поэтому я провалился. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.09.2016, 01:21
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.09.2016 
					
					
					
						Сообщений: 8
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Объясни пожалуйста, логику своих действий в задании? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.09.2016, 09:45
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		  
<script src="http://stacksnippets.net/scripts/snippet-javascript-console.min.js?v=1"></script>
  <script>
Array.prototype.reduce2 = function(c, a) {
    var b = 0;
    for (void 0 == a && (a = this[b], b = 1); b < this.length; b++) a = c(a, this[b]);
    return a
};
 function add(a, b) { return a + b }
 function mul(a, b) { return a * b }
 function foo(a, b) { return a.concat(b) }
 var a = [1, 2, 3, 4]
 console.log(a.reduce(add), a.reduce2(add)) // 10 10
 console.log(a.reduce(add, 10), a.reduce2(add, 10)) // 20 20
 console.log(a.reduce(mul), a.reduce2(mul)) // 24 24
 console.log(a.reduce(foo, ''), a.reduce2(foo, '')) // 1234 1234
  </script>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.09.2016, 09:50
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Vjacheslav143
			
		
	 | 
 
	
		Hints: 
this[i] 
arguments.length
	 | 
 
	
 
 
<script src="http://stacksnippets.net/scripts/snippet-javascript-console.min.js?v=1"></script>
  <script>
Array.prototype.reduce2 = function(c, a) {
    var i = 0;
    for (arguments.length == 1 && (a = this[i], i = 1); i < this.length; i++) a = c(a, this[i]);
    return a
};
 function add(a, b) { return a + b }
 function mul(a, b) { return a * b }
 function foo(a, b) { return a.concat(b) }
 var a = [1, 2, 3, 4]
 console.log(a.reduce(add), a.reduce2(add)) // 10 10
 console.log(a.reduce(add, 10), a.reduce2(add, 10)) // 20 20
 console.log(a.reduce(mul), a.reduce2(mul)) // 24 24
 console.log(a.reduce(foo, ''), a.reduce2(foo, '')) // 1234 1234
  </script>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.09.2016, 10:12
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				js for reduce
			 
			
		
		
		
		
	
 
	| 
		
			Сообщение от Vjacheslav143
			
		
	 | 
 
	
		2. Write the same reduce2 recursively (do not simulate a cycle through recursion) 
 
Hints: 
slice
	 | 
 
	
 
 
<script src="http://stacksnippets.net/scripts/snippet-javascript-console.min.js?v=1"></script>
  <script>
Array.prototype.reduce2 = function(c, a) {
    var b = this.slice(0);
    1 == arguments.length && (a = b.shift());
    b.length && (a = c(a, b.shift()), a = b.reduce2(c, a));
    return a
};
 function add(a, b) { return a + b }
 function mul(a, b) { return a * b }
 function foo(a, b) { return a.concat(b) }
 var a = [1, 2, 3, 4]
 console.log(a.reduce(add), a.reduce2(add)) // 10 10
 console.log(a.reduce(add, 10), a.reduce2(add, 10)) // 20 20
 console.log(a.reduce(mul), a.reduce2(mul)) // 24 24
 console.log(a.reduce(foo, ''), a.reduce2(foo, '')) // 1234 1234
  </script>
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось рони, 09.09.2016 в 10:15.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.09.2016, 11:26
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.09.2016 
					
					
					
						Сообщений: 8
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Спасибо друг! Сразу видно знающего человека. Можешь  коротко описать логику действий? И что дает здесь Reduce? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.09.2016, 11:40
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Vjacheslav143,
  
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	| 
		Метод «arr.reduce(callback[, initialValue])» используется для последовательной обработки каждого элемента массива с сохранением промежуточного результата.
	 | 
 
	
 
 #reduce-reduceright 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.09.2016, 17:37
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.07.2012 
					
					
					
						Сообщений: 49
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Действительно не нужна. Просто привычка вызывать так колбеки    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |