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,068

Сообщение от 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:35
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

lukas_aka_bo,
Зачем alert в функции? Судя по условию задачи, если не сказано специально про alert, значит нужен обычный return. Alert вы можете использовать для проверки себя, но на вызове функции. Уже по этому можно считать все решения неверными.
function arraySum(array) {
    var sum = 0;
    for (var i = 0; i < array.length; i++) {
        sum += array[i];
    };
    return sum;
}
alert(arraySum([2, 4, 3]));

Последний раз редактировалось Rise, 02.06.2018 в 10:39.
Ответить с цитированием
  #6 (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