Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.06.2018, 08:08
Новичок на форуме
Отправить личное сообщение для lukas_aka_bo Посмотреть профиль Найти все сообщения от lukas_aka_bo
 
Регистрация: 02.06.2018
Сообщений: 1

Задания по JS. Нужна адекватная критика.
Всем привет. Кодил я на Python, хотел всегда освоить дальше js. Знал каие-то базовые моменты. Недавно прислали мне задания, что бы проверить уровень знаний js. Сел написал первый свой код на js. По итогу получил фидбек: задания выполнены неверно, потренеруйтесь и попробуйте снова. Так вот суть вопроса в том, что я не против потренироваться, но мне нужен совет, что не так было сделано и что в конце концов я должен тренировать Просто по факту все функции выполняют то, что требовалось в заданиях. Прошу вас глянуть и сказать в чем проблема то, может я действительно идиот и не правильно понял задания, либо же я както не по js-овски их выполнил, или не правильно оформил код. Всем заранее спасибо за ответ, а то ответ "задания выполнены неверно" не дает по ночам спать спокойно.

Задания:
1. In JavaScript write a function summing all array elements.

function arraySum(array) {
// your code goes here
}
arraySum([1, 2, 3, 4]) // 10


2. Let's separate array iteration and an operation to be done.
Write a function folding an array with any given function.


function fold(array, operation) {
// your code goes here
}
function add(a, b) { return a + b }
function mul(a, b) { return a * b }
fold([1, 2, 3, 4], add) // add(add(add(1, 2), 3), 4) === 10
fold([1, 2, 3, 4], mul) // 24


3. Add an optional parameter to start folding with.

function fold(array, operation, initial) {
// your code goes here
// hint: use arguments.length
}
fold([1, 2, 3, 4], add) // 10
fold([1, 2, 3, 4], add, 10) // add(add(add(add(10, 1), 2), 3), 4) === 20
fold([1, 2, 3, 4], mul, 10) // 240
fold([1, 2, 3, 4], add, '10') // '101234'


4. Write the same fold function recursively.
Do not simulate cycle via recursion.


function fold(array, operation, initial) {

// your code goes here
// hint: use array.slice

}

А вот сам код решений:

// Task 1

function arraySum(array){
    var sum = 0;
    for (var i=0; i < array.length; i++) {
        sum+=array[i];
    };
    alert(sum);}
arraySum([2, 4, 3]);

// Task 2

function arraySum(array, operation){
    var answer = array[0];
    for(var i = 1; i < array.length; i++){
        if (operation == '+') {
            answer += array[i];}
        else if (operation == '-') {
            answer -= array[i];}
        else if (operation == '*') {
            answer *= array[i];}
        else if (operation == '/') {
            answer /= array[i];}
        }
    alert(answer);}
arraySum([1, 2, 3, 4], '/');

//Task 3

function arraySum(array, operation, initial){
    if (typeof initial == 'string') {
        var answer = initial + array.join('');}
    
    if (initial == undefined) {
        var answer = array[0];}
    else if (operation == '+') {
        var answer = initial + array[0];}
    else if (operation == '-') {
        var answer = initial - array[0];}
    else if (operation == '*') {
        var answer = initial * array[0];}
    else if (operation == '/') {
        var answer = initial / array[0];}
    
    for(var i = 1; i < array.length; i++){
        if (operation == '+') {
            answer += array[i];}
        else if (operation == '-') {
            answer -= array[i];}
        else if (operation == '*') {
            answer *= array[i];}
        else if (operation == '/') {
            answer /= array[i];}
        }
    alert(answer);}
arraySum([1, 2, 3, 4], '+', '10');

// //Task 4

function arraySum(array, operation, initial){
    function startAnswer(){
        if (typeof initial == 'string') {
            var answer = initial + array.join('');}
        
        if (initial == undefined) {
            var answer = array[0];}
        else if (operation == '+') {
            var answer = initial + array[0];}
        else if (operation == '-') {
            var answer = initial - array[0];}
        else if (operation == '*') {
            var answer = initial * array[0];}
        else if (operation == '/') {
            var answer = initial / array[0];}
        return answer;
    }
    
    var answer = startAnswer()

    for(var i = 1; i < array.length; i++){
        if (operation == '+') {
            answer += array[i];}
        else if (operation == '-') {
            answer -= array[i];}
        else if (operation == '*') {
            answer *= array[i];}
        else if (operation == '/') {
            answer /= array[i];}
        }
    alert(answer);}
arraySum([1, 2, 3, 4], '+');




https://drive.google.com/file/d/1B0n...ew?usp=sharing

Понятно, что может ифоф слишком много, можно было както более элегантно сделать. Но это первый код на js с базовыми знаниями. Правильно ли задания решены? Всем спасибо за адекватную критику.
Ответить с цитированием
  #2 (permalink)  
Старый 02.06.2018, 08:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

Сообщение от lukas_aka_bo
operation == '+'
operation у вас функция и никаких проверок не требует, эту функцию надо применить к каждому элементу массива, и вернуть initial в котором накопить результат всех operation
Ответить с цитированием
  #3 (permalink)  
Старый 02.06.2018, 09:59
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

lukas_aka_bo,
Вы не использовали в решениях имеющиеся у вас в заданиях функции add, mul
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2018, 10:04
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

и в 4ом задании нужно использовать мeтод slice
https://developer.mozilla.org/ru/doc...ts/Array/slice
Ответить с цитированием
  #5 (permalink)  
Старый 02.06.2018, 10:39
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Пример решения задания 2
function fold(array, operation) {
// your code goes here
   var answer = array[0];
   for(var i = 1; i< array.length; i++) {
      answer = operation(answer, array[i]);
   }
   return answer;
}
function add(a, b) { return a + b }
function mul(a, b) { return a * b }
alert(fold([1, 2, 3, 4], add)); // add(add(add(1, 2), 3), 4) === 10
alert(fold([1, 2, 3, 4], mul)); // 24
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
select в js. нужна помощь vladislav_m Общие вопросы Javascript 10 02.04.2011 10:27
JS Jquery нужна помощь globalus2010 Javascript под браузер 1 25.03.2011 00:05
Очень нужна помощь с Ext JS dcbal ExtJS 1 09.07.2010 13:15
Дам 500 руб...нужна любая игра на JS с объяснением astra_89 Работа 5 31.05.2010 08:37