forEach Javascript - Как это работает?

Я тестирую функцию Javascript, в тестах она всегда входит в условие и выполняет console.log(), она работает так:

function getByName(name)
{
    let result = {};
    FAKE_DATA.forEach(element => {

        if (element.title === name) {
            console.log('@@@@@@@@@@');
            result = element;
        }
    });

    return result;
}


, но эта:

function getByName(name)
{
    let result = {};
    FAKE_DATA.forEach(element => {

        if (element.title === name) {
            console.log('@@@@@@@@@@');
            return element; // dudo del comportamiento de esta línea
        }
    });

    return result;
}

всегда возвращает пустой объект мне, почему?

4
задан 08.11.2019, 00:34
5 ответов

Мы сделаем одну implementaciГіn простая mГ©todo forEach для того, чтобы ты видел cГіmo, функционируй (одна versiГіn mГЎs завершает serГ - Г©sta, MDN :

function paraCadaUno(fn, array) {
  if (array === undefined) {
   array = this;
  }

  for (let i = 0; i < array.length; i++) {
   fn(array[i], i, array);
  }
}

Array.prototype.forEach2 = paraCadaUno;

let test = [0, 2, 4, 6];

let suma1 = i => { 
  console.log('sumamos uno a', i);
  return i + 1;
}

let resultado = test.forEach2(suma1);
console.log(resultado);

, Поскольку ты можешь видеть, mГ©todo sГіlo берется за то, чтобы выполнять ее funciГіn, который ты переместил его как parГЎmetro для каждого элемента array, совсем не mГЎs. Любой результат ее funciГіn проигнорирован.

Если то, что estГЎs ища является элементом или некоторыми, которые выполняли бы одну condiciГіn, или ты хочешь получить одну transformaciГіn от данных, у тебя есть другие mГ©todos доступные:

let test = [ 1,2,3,4,5,6,7,8,9,0];

//quiero todos los pares, filtramos los que cumplen la condición
let pares = test.filter(a => a % 2 === 0);

console.log('Pares', pares.toString());

//quiero el primer par, sólamente
let primerPar=test.find( a => a % 2 === 0);
console.log('Primer par', primerPar);

//quiero los números multiplicados por 2:
let duplicados = test.map(a => a * 2);
console.log('Duplicados', duplicados.toString());

//quiero sumar todos los elementos
let total= test.reduce((acumulador, b) => acumulador + b);
console.log('Suman', total)
1
ответ дан 10.11.2019, 22:26
  • 1
    Хорошая, пальто они обобщают главных mé все, чтобы работать с arrays . – Orici 08.11.2019, 12:03

Уже они объяснили тебе достаточно, как оно функционирует forEach, только querГ, - чтобы доводить до сведения, что другой способ это видеть состоит в том, что forEach Гєnico, которая делает, он состоит в том, чтобы выполнять callback из-за каждого элемента. .forEach(callback), .map, между другими, делает что-то как .map(return callback). Похожий пример в как funcionarГ - в forEach, но с одним for:

function evalua(e) {
  return e + 1;
}

const a = function(){
  for (let i = 0; i < 2; i++) {
    evalua(i);//<-- solo ejecuta, no hace return
  }
}

console.log(a());//<-- siempre va a ser undefined

forEach сходный с for, большое различие состоит в том, что он повторяет forEach всегда на всех элементах и в команде. Это означает, что не можем изменять indice и не можем делать также один break.

1
ответ дан 10.11.2019, 22:26

Проблема, которая у тебя есть во втором примере, состоит в том, что forEach не возвращает никогда ничего (undefined).

Синтаксис forEach - следующий:

arr.forEach(callback(currentValue [, index [, array]])[, thisArg]);

, Поскольку verГЎs callback - одна funciГіn anГіnima, что получает эти три paremetros:

  1. настоящая Стоимость array.
  2. настоящий Index array.
  3. Полный array, который ты пробегаешь.

В твоем случае следует тебе использовать лучше немного тип find, что функционирует точно как forEach с Гєnica различие, дело в том, что он возвращает стоимость, которая выполняет одну condiciГіn или undefined в противоположном случае

Пример:

let personas = [{name:'Persona1', id:1}, {name:'Persona2', id:2}];

let persona = personas.find(persona => persona.id === 1)
console.log(persona)
0
ответ дан 10.11.2019, 22:26

. forEach возврати undefined: Стоимость retorn .forEach

let returnValue=[1,2,3,4,5].forEach(e=>{
    console.log(e);
});
console.log(returnValue);

Стоимость vaciГі, - переменной result, в которой никакой момент ты "наполнил", когда ты делаешь "map" let nuevoArray=array.map();, estarГ-схвати подбирая стоимость, возвращенную map, в твоем случае ты не подбираешь того, который возвращает forEach (что-то нормальное), если бы ты сделал это verГ-экспертом undefined:

function getByName(name)
{
    let result = {};
    result=[{"title":"titulo"},{"title":"example"},{"title":"prueba"}].forEach(element => {
        if (element.title === name) {
            console.log('@@@@@@@@@@');
            return element; // el return no hace nada, por defecto retorna `undefined`
        }
    });

    return result;
}

console.log(getByName("example"));

return внутри метода forEach не достанет тебе тебя funciГіn getByName, если не, что возвращал стоимость forEach.

0
ответ дан 10.11.2019, 22:26

Foreach ничего не возвращает, а именно, undefined. Используй .map для этого

-2
ответ дан 10.11.2019, 22:26

Теги

Похожие вопросы