JavaScript

Reduce(), accumulator = [ ] и не... чего не работает (JavaScript)

Всем привет!)))
Не пойму, как написать возврат чтобы взаимодействие происходило с аккумулятором как с массивом, и при этом все работало.

Заранее спасибо за ответы=)
Шахоб Мирзаев
Шахоб Мирзаев
68 755
Подумайте хорошенько над логикой того что Вы написали... что именно возвращаете в функции, и зачем вообще это делаете.

Взаимодействие с acc происходит как с массивом, с этим все ок. Просто, код явно написан без понимания того, что он собственно делает - возвращает результатом ОДИН ЭЛЕМЕНТ массива (а точнее, значение элемента). Что ожидается в результате? Массив. Так что тогда должна возвращать коллбэк функция?

Без обид, пожалуйста... как только прекратите быдлокодить, и начнете изучать то что пишете, начнете писать код осознанно - поверьте, программировать станет гораздо проще. И научитесь значительно быстрее.

p.s.: Использование reduce() в данном случае не совсем уместно, больше подойдет map().
Kluhew Alexander
Kluhew Alexander
76 083
Лучший ответ
Шахоб Мирзаев Спасибо! Я понимаю что должно происходить суммирование переменной аккумулятора, вот и задаю вопрос как это выразить программно, со строкой там всё просто acc += item но а как с массивом быть в данной ситуации?
Шахоб Мирзаев Ярослав, да, map лучше, но меня интересует взаимодействие по схеме reduce(), accumulator = [ ]
По той причине чтобы понять, почему мой код не работает и как взаимодействовать с переменной accumulator = [ ] как с массивом
Шахоб Мирзаев Именно с этой целью был задан вопрос.
Ваша проблема в том что Вы пытаетесь скрестить ёжека с черепахой я уже говорил Вам что в стрелочных функциях другая концепция и использование return в них это ошибка
Вот ниже написал вам рабочий пример как работать с reduce

j={name:"j"};
p={name:"p"};
m={name:"m"};
u=[j,p,m];

n=u.reduce((a,b)=>(a[a.length]=b.name,a),[]);

console.log(n);//["j", "p", "m"]

Эта укороченная версия вашего кода

хотя проще было написать скажем так

u=[
{name:"j"},
{name:"p"},
{name:"m"}
];

n=u.reduce((a,b)=>(a[a.length]=b.name,a),[]);

PS понятно что Вы просто хотите разобраться reduce является самой сложной в понимании функцией но и самой уневерсальной посуте по суте она одна может заменить все остольные map,forEach....

let users = [
{ name: "Peter", age: 25 },
{ name: "Sonya", age: 18 },
{ name: "Huanita", age: 19 }
];

if( typeof Object.prototype.Map !== 'function' ) {
Array.prototype.Map = function( fn ) {
if( fn && Object.prototype.toString.call( fn ) === '[object Function]' ) {
arr = [];
for( var i = 0; i < this.length; i++ )
arr.push( fn( this[ i ], i, this ));
return arr;
}
};
}

let result = users.Map(( el ) => el.name );
result[ 3 ] = "Tanya";

console.log( result );

https://jsfiddle.net/b5xaume4/
https://jsfiddle.net/b5xaume4/
https://jsfiddle.net/b5xaume4/
Шахоб Мирзаев Ого! Спасибо! вы создали свой метод map.

Слишком запутано чтобы понять как он работает (((
Шахоб Мирзаев на что ссылается this?