Javascript reduce 101
6321 단어 arrayreducejavascriptcallback
reduce()
함수는 유용한 배열 방법입니다.불행히도, 나는 그것을 이해하는 데 너무 많은 시간을 들인 적이 없다. 왜냐하면 그것은 너무 복잡해 보이기 때문이다.사실은, 이 점은 모두 어렵지 않다!우리는 그것을 충분한 작은 덩어리로 분해하기만 하면 된다.그럼 우리는 아직도 무엇을 기다리고 있습니까?우리 그것을 이해해 봅시다!그것은 어떤 작용을 합니까?
PerMozilla:
The reduce() method executes a reducer function (that you provide) on each element of the array, resulting in a single output value.
나는 이 묘사가 약간 오도된 것 같다. 왜냐하면 내가 '단값' 을 들으면 간단한 숫자/문자열 출력을 생각하지만, Reduce는 한 대상이나 다른 수조로 쉽게 되돌아갈 수 있기 때문이다.
예.
무수한 예들이 사용할 수 있다.기본 3가지 영역을 살펴보겠습니다.
하나의 숫자로 감소
reduce에서 가장 자주 사용하는 용법은 수조의 모든 원소를 더하는 것이다.
const arr = [1,2,3,4];
arr.reduce((acc, currentVal) => acc + currentVal);
// returns 10
그래, 방금 무슨 일이 있었지?Reduce는 배열의 모든 요소를 반복합니다. (우리가 시작 값을 주지 않으면 첫 번째 요소를 시작 값으로 사용합니다.)매번 교체할 때마다, 항상 하나의 누적기와 현재 값이 있다.네가 예를 읽을 때.매번 교체할 때마다 누가 누적기이고 누가 현재치인지 생각해 보자.
acc + currentVal
;1 + 2. acc + currentVal
;3 + 3. acc + currentVal
;6 + 4. 배열로 축소
가령 우리가 하나의 수조를 얻었다고 가정한다면
const wealthiestPeople = [
{name: "Gates", worth: 105700000000},
{name: "Bezos", worth: 131000000000},
{name: "Buffet", worth: 82500000000},
{name: "Arnault", worth: 76000000000},
{name: "Helu", worth: 75600000000}
]
얘야, 너는 이 돈으로 무엇을 할 수 있느냐🤑? 어쨌든 우리는 순자산이 1000억 위안보다 낮은 모든 자산을 비추고 여과하며 같은 그룹으로 돌아가기를 바란다.wealthiestPeople.reduce((acc, currentVal) => {
if(currentVal.worth > 100000000000){
return acc
}
acc.push(currentVal)
return acc
}, [])
// returns [ { name: 'Buffet', worth: 82500000000 },
{ name: 'Arnault', worth: 76000000000 },
{ name: 'Helu', worth: 75600000000 } ]
reduce는 동시에 비추고 필터할 수 있어요. 멋있지 않아요?우리 그것을 분해합시다.[]
을 전달했습니다.여느 때와 마찬가지로, 우리는 모든 원소를 교체하고 있다.[]
,currentVal은{name: "Gates", worth: 105700000000}
이다.그것은 가치 테스트를 통과하지 못했기 때문에 acc, 즉 []
로 되돌아왔다.[]
이다.currentVal은 {name: "Bezos", worth: 131000000000}
입니다.그것도 가치 테스트를 통과하지 못했다.그것은 acc, 즉 []
을 되돌려줍니다.[]
이다.currentVal은 {name: "Buffet", worth: 82500000000}
입니다.그것은 가치 테스트를 통과했다.Buffet 객체를 acc로 밀어 넣고 acc[{name: "Buffet", worth: 82500000000}]
로 돌아갑니다.[{name: "Buffet", worth: 82500000000}]
이다.currentVal은 arnault 객체입니다.그것은 가치 테스트를 통과했다.그것은 {name: "Arnault", worth: 76000000000}
acc에 밀어넣었다. 이것은 acc, 즉 [{name: "Buffet", worth: 82500000000}, {name: "Arnault", worth: 76000000000}]
로 되돌아왔다.[{name: "Buffet", worth: 82500000000}, {name: "Arnault", worth: 76000000000}]
이다.currentVal은 Helu 객체입니다.그것은 가치 테스트를 통과했다.그것은 물체를 밀고 있다.그것은 acc, 즉 [ { name: 'Buffet', worth: 82500000000 },{ name: 'Arnault', worth: 76000000000 },{ name: 'Helu', worth: 75600000000 } ]
을 되돌려줍니다.한 훌륭한 독자는 필터를 사용하면 이 점을 쉽게 할 수 있다고 말했다.
wealthiestPeople.filter(function(p) {
return p.worth < 1100000000000
})
이 경우 .filter()
는 더 좋은 작업 도구이다.reduce가 가장 유용한 예는 맵과 필터를 동시에 사용해야 한다는 것이다.예를 들어 우리가 가치에 따라 필터를 할 뿐만 아니라 금액을 문자열로 바꾸고
$
값을 추가해야 한다. 예를 들어 다음과 같다.// same reduce cod as above, except
// add this line before push
currentVal.worth = `$${currentVal.worth}.00`
acc.push(currentVal)
// returns
[ { name: 'Buffet', worth: '$82500000000.00' },
{ name: 'Arnault', worth: '$76000000000.00' },
{ name: 'Helu', worth: '$75600000000.00' } ]
또 다른 훌륭한 독자는 리듀스가 맵+Filter 조합보다 더 유용하다고 말했다. 왜냐하면 우리는 두 번이 아니라 한 번만 그룹을 교체할 수 있기 때문이다. 맵 기간에 한 번, Filter 기간에 한 번 교체할 수 있기 때문이다.맵 + Filter를 실행할 때마다 Reduce를 어떻게 사용하는지 고려하십시오!예를 들어, 만약 당신이 그들의 모든 재산을 합치고 싶다면:
wealthiestPeople.reduce((acc, currentVal) => {
return acc + currentVal.worth;
}, 0)
한 물체로 환원하다
우리의 마지막 임무는 그것을 하나의 물체로 간소화하는 것이다.같은 그룹을 지정하면, 우리는 그것을 하나의 대상으로 간소화하고, 그 이름을 키로 하고,
{worth: xxx}
를 값으로 할 수 있습니까?예를 들면 다음과 같습니다.{
'Buffet': {worth: xxx},
'Gates': {worth: xxx},
// etc
}
계속 읽기 전에, 당신은 왜 5-10분 동안 발버둥치지 않고, 스스로 그것을 해결해 보지 않습니까?만약 네가 끊겼다면 걱정하지 말고 (나도 처음 배울 때 끊겼다) 따라 읽어라!이것이 관건이니 적어도 한번 시도해 보아라..
.
.
wealthiestPeople.reduce((acc, currentVal) => {
acc[currentVal.name] = {worth: currentVal.worth}
return acc
}, {})
언제 Reduce를 사용할 줄 알았습니까?
언제든지, 우리가 하나의 그룹을 입력으로 얻기만 하면, Reduce를 사용할 기회가 있다.하나의 그룹이 완성될 때마다 다른 그룹, 대상, 값을 되돌려야 할 때, Reduce가 당신을 도와 완성할 수 있습니다.
다른 때는 Reduce를 사용하는 방법이 유용하다고 생각하십니까?아래
만약 무슨 문제/걱정이 있으면 저에게 알려 주세요.여기까지 읽어줘서 고마워요.즐거운 코딩!
Reference
이 문제에 관하여(Javascript reduce 101), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/iggredible/javascript-reduce-101-563g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)