#javascript #arrays
#javascript #массивы
Вопрос:
Здесь чрезвычайно упрощенная проблема, поскольку я новичок; Я пытаюсь суммировать все нечетные значения массива чисел, но функция, которую я использую, не возвращает… что угодно. Немного потеряно относительно точной ошибки в приведенном ниже коде…
function addOdds(numArray) {
//create sum variable
let sum = 0;
for(i = 0; i < numArray.length; i ) {
if(numArray[i] % 2 === 1) {
sum = sum numArray[i];
}
}
return sum;
}
Комментарии:
1. Что вы передаете в качестве параметра этой функции? Если вы добавляете
addOdds([1,2,3,4,5,6])
, кажется, что он работает нормально.2. Этот код работает нормально — он возвращает сумму нечетных чисел в массиве
3. Я с другими ребятами… Этот код выполняется, как и ожидалось. Это многословно и старомодно, но это работает.
4. Добро пожаловать! Старайтесь учитывать отступы и быть последовательными в кодировании. Это поможет вам и всем, кто просматривает ваш код, работать более плавно. И, если вы не являетесь мастером (и даже тогда) — не «экономьте» на точках с запятой = ВСЕГДА используйте их. PS. как говорили другие: ваш код работает для нас — покажите нам, что вы отправляете в функцию — проблема, вероятно, заключается в этом…
Ответ №1:
Хороший способ суммирования чисел в массиве — использовать array.reduce() . Это намного быстрее, чем цикл, и позволяет использовать гораздо меньше кода. Следующий пример оставляет сумму неизменной, если запись не является нечетной, и в этом случае она добавляет эту запись к сумме.
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
const sumOdds = arr => arr.reduce((sum,i) => i % 2 === 0 ? sum : sum i );
console.log(sumOdds(numbers))
Ответ №2:
если у вас есть массив, вам не нужно использовать цикл for и пытаться использовать сложную логику для индексов.
Вы можете просто использовать встроенную JS-функцию «forEach ()»;
let sum = 0;
// nums can be any array
let nums = [1, 2, 3, 4];
nums.forEach(num => {
if (num % 2 === 1) {
sum = sum num
}})
console.log(sum)
Комментарии:
1. Какой смысл использовать map, если вы не создаете и не используете сопоставленный массив? Почему не Array.forEach()?
2. @user1599011 Уверен, что вы можете использовать
forEach()
. Это будет работать точно так же. Это зависит от обстоятельств. Вы должны знать разницу между b / wmap
amp;forEach
.forEach()
ведет себя как apure function
и возвращает тот же массив, в то времяmap
как возвращает совершенно новый массив в качестве результата. Но в данном случае это не имеет значения. ВыforEach
также можете использовать.3. Array.forEach() ничего не возвращает; он выполняет код в обратном вызове. Array.map() возвращает массив, но поскольку этот массив не будет использоваться, я не вижу смысла в использовании map() .
4. Да, конечно, в этом случае, если вы беспокоитесь о производительности, вы должны использовать
forEach()
в этом сценарии.