Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.09.2016, 12:46
Новичок на форуме
Отправить личное сообщение для Vjacheslav143 Посмотреть профиль Найти все сообщения от Vjacheslav143
 
Регистрация: 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
Ответить с цитированием
  #2 (permalink)  
Старый 08.09.2016, 16:34
Аспирант
Отправить личное сообщение для moron Посмотреть профиль Найти все сообщения от moron
 
Регистрация: 29.07.2012
Сообщений: 49

С помощью цикла, как вариант
http://codepen.io/mogafk/pen/EgjZKw?editors=0010
Это больше похоже на какое-то маленькое тестовое задание. Если так, то просить других людей это решить просто зашквар ужасный. Хотя это мог бы быть и видеоурок, но зачем тогда их смотреть если не можешь решить задания?

Последний раз редактировалось moron, 08.09.2016 в 16:39.
Ответить с цитированием
  #3 (permalink)  
Старый 08.09.2016, 16:43
Новичок на форуме
Отправить личное сообщение для Vjacheslav143 Посмотреть профиль Найти все сообщения от Vjacheslav143
 
Регистрация: 08.09.2016
Сообщений: 8

Да! Это было тестовое задание которое я не смог выполнить из за отсутствия опыта. Теперь я хочу спросить у опытных программистов как бы они его выполнили (на будущее мне). Я не смог найти достаточно информации про Reduce и поэтому я провалился.
Ответить с цитированием
  #4 (permalink)  
Старый 09.09.2016, 01:21
Новичок на форуме
Отправить личное сообщение для Vjacheslav143 Посмотреть профиль Найти все сообщения от Vjacheslav143
 
Регистрация: 08.09.2016
Сообщений: 8

Объясни пожалуйста, логику своих действий в задании?
Ответить с цитированием
  #5 (permalink)  
Старый 09.09.2016, 02:22
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

moron, зачем через call вызов делать там что смена контекста нужна?
Ответить с цитированием
  #6 (permalink)  
Старый 09.09.2016, 09:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070


<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>
Ответить с цитированием
  #7 (permalink)  
Старый 09.09.2016, 09:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от 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>
Ответить с цитированием
  #8 (permalink)  
Старый 09.09.2016, 10:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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.
Ответить с цитированием
  #9 (permalink)  
Старый 09.09.2016, 11:26
Новичок на форуме
Отправить личное сообщение для Vjacheslav143 Посмотреть профиль Найти все сообщения от Vjacheslav143
 
Регистрация: 08.09.2016
Сообщений: 8

Спасибо друг! Сразу видно знающего человека. Можешь коротко описать логику действий? И что дает здесь Reduce?
Ответить с цитированием
  #10 (permalink)  
Старый 09.09.2016, 11:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Vjacheslav143,
Цитата:
Метод «arr.reduce(callback[, initialValue])» используется для последовательной обработки каждого элемента массива с сохранением промежуточного результата.
#reduce-reduceright
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить проблему Ingiborn Общие вопросы Javascript 0 10.07.2014 13:12
Люди добрые, помогите чайнику решить задание. Kostyk92 Элементы интерфейса 6 06.02.2012 20:21
Помогите решить проблему felixfix Общие вопросы Javascript 4 21.04.2011 12:00
Помогите сделать тестовое задание начального уровня по js makregistr Работа 1 16.12.2010 14:26
Помогите начинающему программисту ;) druna Общие вопросы Javascript 5 22.07.2008 12:34