Всем привет. Кодил я на Python
, хотел всегда освоить дальше js
. Знал какие-то базовые моменты. Недавно прислали мне задания, что бы проверить уровень знаний js
. Сел написал первый свой код на js.
По итогу получил фидбек: задания выполнены неверно, потренеруйтесь и попробуйте снова.
Так вот суть вопроса в том, что я не против потренироваться, но мне нужен совет, что не так было сделано и что в конце концов я должен тренировать write
.
Просто по факту все функции выполняют то, что требовалось в заданиях. Прошу вас глянуть и сказать в чем проблема то, может я действительно не правильно понял задания, либо же я как-то не по js-ий
их выполнил, или не правильно оформил код. Всем заранее спасибо за ответ, а то ответ "задания выполнены неверно"
не дает по ночам спать спокойно.
Задания: 1. In JavaScript write a function summing all array elements.
function arraySum(array) {
// your code goes here
}
arraySum([1, 2, 3, 4]) // 10
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
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'
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/1B0nd1l0FRa2lAe6YelpKr8crri24_2-P/view?usp=sharing
Понятно, что может условий- if()
слишком много, можно было как-то более элегантно сделать?
Но это первый код на 'js' с базовыми знаниями. Правильно ли задания решены?
Всем спасибо за адекватную критику.
Все кроме последнего нацелены на использование функции reduce, она позволяет вычислять значение на базе массива, объяснять как работает нет смысла, найдете документацию.
1.
function arraySum(array) {
return array.reduce((acc, val) => (acc + val), 0)
}
arraySum([1, 2, 3, 4]) // 10
function fold(array, operation) {
return array.reduce((acc, val) => operation(acc, val))
}
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
function fold(array, operation, initial) {
return initial
? array.reduce((acc, val) => operation(acc, val), initial)
: array.reduce((acc, val) => operation(acc, val))
}
const add = (a, b) => (a + b)
const mul = (a, b) => (a * b)
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'
тут нужно было использовать рукурсию
function fold(array, operation, initial) {
initial = initial || 0
const val = operation(initial, array.shift())
if (array.length) return fold(array, operation, val)
return val
}
const add = (a, b) => (a + b)
const mul = (a, b) => (a * b)
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'
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Друзья, подскажите как сделать, всю голову сломал) Хочу реализовать выпадающее меню по кликуВсё что задумал вроде получилось, но надо еще...
javascript не знаюВ процессе создания кода возникла необходимость ввести рассчитанную ставку в поле с кодом: