JavaScript 고차 함수
26706 단어 javascript
이 기사에서는 일반적으로 사용되는 몇 가지 고차 함수에 대해 설명합니다. for, while 루프 및 if 문을 사용하여 구현을 보여주고 고차 함수로 이를 단순화하려고 합니다.
const footballers=[
{name:'Brian',position:'midfield',number:22},{name:'james',position:'midfield',number:44},{name:'Bruno',position:'keeper',number:1},{name:'Ramos',position:'defender',number:2},{name:'martinez',position:'forward',number:7},{name:'ozil',position:'midfield',number:10},{name:'emery',position:'striker',number:9},{name:'John',position:'defender',number:5},{name:'evra',position:'defender',number:3},{name:'sane',position:'forward',number:13},{name:'sandro',position:'midfield',number:14},{name:'Emerik',position:'keeper',number:100},{name:'brent',position:'midfield',number:22}
]
나는 가지고 놀기 위해 위에 몇 가지 데이터를 추가했습니다. 첫 번째 예에서 모든 이름의 목록을 출력하고 이름이라는 새 배열에 저장해 보겠습니다.
1. 각
let names=[]
for (let i=0;i<footballers.length;i++){
names.push(footballers[i].name)
}
console.log(names)
//name array includes
//[
// 'Brian', 'james',
// 'Bruno', 'Ramos',
// 'martinez', 'ozil',
// 'emery', 'John',
// 'evra', 'sane',
// 'sandro', 'Emerik',
// 'brent'
// ]
위의 결과는 아래와 같이 forEach 루프를 한 줄로 사용하여 동일한 작업을 수행할 수 있습니다.
let names=[]
footballers.forEach(footballer => names.push(footballer.name))
//names array returned will have
//[
// 'Brian', 'james',
// 'Bruno', 'Ramos',
// 'martinez', 'ozil',
// 'emery', 'John',
// 'evra', 'sane',
// 'sandro', 'Emerik',
// 'brent'
// ]
2. 필터
연령 배열이 있고 필터링하고 13-20세 사이의 연령만 포함하고 싶다고 가정합니다.
const ages =[20,15,14,12,8,9,3,21,40,51,35,17,19,17,12,18]
const teen =[]
for(let i=0;i<ages.length;i++){
if(ages[i]> 13 && ages[i] <= 20){
teen.push(ages[i])
}
}
console.log(teen)
//teen array after loop
// [
// 20, 15, 14, 17,
// 19, 17, 18
// ]
그러나 필터 기능을 사용할 때 코드는 다음과 같습니다.
let teen = ages.filter(age =>{
if(age >=13 && age<= 20 ){
return true
}
})
console.log(teen)
//teen constant
// [
// 20, 15, 14, 17,
// 19, 17, 18
// ]
//another example("return forwards only")
let forwards =footballers.filter(footballer => footballer.position === 'forward')
// forwards
// [
// { name: 'martinez', position: 'forward', number: 7 },
// { name: 'sane', position: 'forward', number: 13 }
// ]
//another example("return nonMidfielders only")
let nonMidfielder =footballers.filter(footballer => footballer.position !== 'midfield')
// [
// { name: 'Bruno', position: 'keeper', number: 1 },
// { name: 'Ramos', position: 'defender', number: 2 },
// { name: 'martinez', position: 'forward', number: 7 },
// { name: 'emery', position: 'forward', number: 9 },
// { name: 'John', position: 'defender', number: 5 },
// { name: 'evra', position: 'defender', number: 3 },
// { name: 'sane', position: 'forward', number: 13 },
// { name: 'Emerik', position: 'keeper', number: 100 }
// ]
필터 기능을 사용하는 두 번째 구현에서는 새 배열을 만들고 푸시할 필요가 없습니다.
3. 지도
Map 함수는 일대일 관계를 제공하므로 이 관계를 사용하여 원하는 방법으로 데이터를 변경하거나 조작할 수 있습니다.
//using a for loop
let positions =[]
for(let i = 0;i<footballers.length;i++){
positions.push(footballers[i].position)
}
// positions array
//[
// 'midfield', 'midfield',
// 'keeper', 'defender',
// 'forward', 'midfield',
// 'forward', 'defender',
// 'defender', 'forward',
// 'midfield', 'keeper',
// 'midfield'
// ]
//using a map function
let positions = footballers.map(footballer => footballer.position)
// positions array
//[
// 'midfield', 'midfield',
// 'keeper', 'defender',
// 'forward', 'midfield',
// 'forward', 'defender',
// 'defender', 'forward',
// 'midfield', 'keeper',
// 'midfield'
// ]
console.log(positions)
다시 for 루프를 사용할 때 위치 배열을 먼저 생성한 다음 루프 내부에서 모든 반복 후에 배열로 푸시해야 합니다. 그러나 지도 기능을 사용할 때 지도 기능의 결과는 일정한 위치로 설정됩니다. 맵 기능을 사용하면 더 적은 수의 코드 행과 더 적은 단계로 동일한 결과를 얻을 수 있습니다. 즉, 새 배열을 만들고 푸시할 필요가 없습니다. 선택적 인덱스 인수를 두 번째 인수로 map 함수에 전달할 수도 있습니다.
let positions = footballers.map((footballer,index) => `${index}: ${footballer.position}`)
// the following is logged on the console with the index on the left
// [0: midfield
// 1: midfield
// 2: keeper
// 3: defender
// 4: forward
// 5: midfield
// 6: forward
// 7: defender
// 8: defender
// 9: forward
// 10: midfield
// 11: keeper
// 12: midfield]
4. 정렬
정렬 기능은 단순히 데이터를 가장 낮은 것에서 가장 큰 것 또는 가장 큰 것에서 가장 작은 것으로 정렬합니다. 배열을 정렬하기 위해 비교를 위해 위아래로 이동하는 두 개의 위치 인수가 필요합니다.
const sortedFootballers =footballers.sort((a,b) =>(a.number >b.number? 1 :-1))
// sorted by number from smallest to highest
//[
// { name: 'Bruno', position: 'keeper', number: 1 },
// { name: 'Ramos', position: 'defender', number: 2 },
// { name: 'evra', position: 'defender', number: 3 },
// { name: 'John', position: 'defender', number: 5 },
// { name: 'martinez', position: 'forward', number: 7 },
// { name: 'emery', position: 'forward', number: 9 },
// { name: 'ozil', position: 'midfield', number: 10 },
// { name: 'sane', position: 'forward', number: 13 },
// { name: 'sandro', position: 'midfield', number: 14 },
// { name: 'brent', position: 'midfield', number: 22 },
// { name: 'Brian', position: 'midfield', number: 22 },
// { name: 'james', position: 'midfield', number: 44 },
// { name: 'Emerik', position: 'keeper', number: 100 }
// ]
//other examples
let sortedAges =ages.sort((a,b)=> a-b)
//arranged from smallest to highest
// [
// 3, 8, 9, 12, 12, 14,
// 15, 17, 17, 18, 19, 20,
// 21, 35, 40, 51
// ]
sortedAges =ages.sort((a,b)=> b-a)
//arranged from highest to smallest
// [
// 51, 40, 35, 21, 20, 19,
// 18, 17, 17, 15, 14, 12,
// 12, 9, 8, 3
// ]
console.log(sortedAges)
5. 감소
reduce 함수는 두 개의 위치 인수를 취합니다. 첫 번째는 누산기이고 다른 하나는 반복된 값이고 누산된 값을 반환합니다.
// the total of all the ages array
//using a for loop
let total = 0
for(let i=0;i<ages.length;i++){
total+=ages[i]
}
console.log(total)
//total
// 311
//using reduce
// last argument is zero ("the starting value of total")
let agesTotal = ages.reduce((total,age)=> total+age,0)
console.log(agesTotal)
// 311
let names = footballers.reduce((start,footballer) => start + " " + footballer.name ,"")
console.log(names)
// names combined , this is to show reduce can also be used on strings
// Bruno Ramos evra John martinez emery ozil sane sandro brent Brian james Emerik
결론
JavaScript Higher Order 함수와 사용법에 대한 통찰력을 얻는 데 도움이 되었기를 바랍니다.
Reference
이 문제에 관하여(JavaScript 고차 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/edwardcashmere/javascript-higher-order-functions-4ph8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)