2016-12-14 3 views
1

Мне предоставлен массив, полный целых чисел, и вы хотите создать новый массив со средними значениями каждого целого числа и его последователя. Для этого я попытался использовать функцию map.Возвращение undefined from map function - code wars

var arr = [1,2,3,4]; 

arr.map(function(a, b){ 
    return (a + b/2); 
}); 

Я считаю, что это работает, как если бы я запускаю это в консоли все работает, как и ожидалось, однако проблема в том, что она возвращается неопределенным, где вызов устанавливается. challenge is set here. Есть что-то глупое, что мне не хватает?

ответ

2

Вы можете использовать параметры обратного вызова для Array#map, который является самим элементом, индексом и ссылкой на массив. Затем присвойте результат переменной и пропустите первый элемент, потому что вы получите еще один элемент по мере необходимости.

var arr = [1, 2, 3, 4], 
 
    result = arr.map(function(a, i, aa) { 
 
     return (aa[i - 1] + a)/2; 
 
    }); 
 

 
result.shift(); 
 
console.log(result);

Другим возможным решением с Array#reduce, который отображает более вашу попытку.

var arr = [1, 2, 3, 4], 
 
    result = []; 
 

 
arr.reduce(function(a, b) { 
 
    result.push((a + b)/2); 
 
    return b; 
 
}); 
 

 
console.log(result);

+0

Thanks @nina! Хорошее решение –

0

базовое решение может быть с итерации.

foo = function(arr){ 
    var result=[]; 
    for(var i=0; i<arr.length-1; i++) { 
    result.push((arr[i]+arr[i+1])/2) 
    } 
    return result; 
} 
+0

в вашем ответе есть синтаксическая ошибка. Спасибо, что ответили tho :-) –

+0

спасибо, полу двоеточие должно быть вместо запятой -)) – marmeladze

0

вы должны понимать карту() или уменьшить() или фильтр

Смежные вопросы