2017-12-10 8 views
0

자바 스크립트를 사용하여 .map에서 발생한 값을 반환하려고 할 때 문제가 있습니다. 내 코드가있다 :자바 스크립트에서 맵 반복의 값을 반환 할 수 없습니다.

function LineaDeSuccion() { 
    const carga = vm.cargaTotal/vm.numeroEvaporadores; 
    vm.succion.map(i => { 
    if (i.temperatura == vm.tempSel) { 
     const cargas = Object.keys(i).map(function(key) { 
     return i[key]; 
     }); 
    // I need to return this value in my function 
    return getKeyByValue(i, closest(cargas, carga)); 
    } 
    // Obviously I can't do it because the value it's encapsulated into the map callback. 
    // How can I solve it? 
    return value; 
    }); 
} 

답변

1

한 가지 방법은 Array.prototype.find을 사용하여 배열에서 원하는 값을 찾은 다음 필요한 변환을 수행하는 것입니다. 이 방법은 전체 배열을 반복하지만, 일치가 발견되면 즉시 find 루프의 탈옥하지 않습니다

function LineaDeSuccion() { 
    const carga = vm.cargaTotal/vm.numeroEvaporadores; 
    const i = vm.succion.find(i => i.temperatura == vm.tempSel); 

    if (i === undefined) { 
     throw Error("can't find what I want in the array"); 
    } 

    const cargas = Object.keys(i).map(function (key) { 
     return i[key]; 
    }); 

    return getKeyByValue(i, closest(cargas, carga)); 
} 

참고. 어레이에 i.temperatura == vm.tempSel 조건을 만족하는 여러 요소 i이 있으면 마지막 일치가 아닌 첫 번째 일치를 반환합니다.

+0

나를 위해 작동합니다. 다른 해결책은 나를 보아 정의되지 않은 상태로 만듭니다. –

0

당신이 당신의 map 이외의 값을 반환하려는 경우, 당신은 당신의 map 밖에서 살고 변수를 설정해야하고 내에서 그 값을 설정합니다 당신의 map :

function LineaDeSuccion() { 

    const carga = vm.cargaTotal/vm.numeroEvaporadores; 

    let value = "defaultValue"; // default value 

    vm.succion.map(i => { 

     if (i.temperatura == vm.tempSel) { 

      const cargas = Object.keys(i).map(function(key) { 
       return i[key]; 
      }); 

      value = getKeyByValue(i, closest(cargas, carga)); // new set value 
     } 
    }); 

    return value; 
}