숫자 배열 요소들의 평균
function computeAverageOfNumbers(arr) {
if (arr.length === 0) return 0
let sum = arr.reduce((acc, cur) => acc + cur)
return sum / arr.length
}
객체를 요소로 갖는 배열과 문자열을 입력받아 각 요소의 'animal' 속성값이 문자열과 일치할 경우, 해당 요소의 'score' 속성값을 모두 더한 값을 리턴해야 합니다.
function calculateScore(records, value) {
let equals = records.filter(function(el){
if (el === value) return true
})
return equals.reduce((acc, cur) => acc.score + cur.score)
}
필터를 이용해서 value와 el이 같을 때를 걸러내고, 그 배열의 합을 구했다고 생각했는데.. 암튼 답이 안나왔다.
계속 빈배열을 출력하는 결과가 나옴
⭕️ 성공
function calculateScore(records, value) {
let sum = records.reduce(function(acc, obj){
if (value === obj.animal) {
return acc + obj.score
} else {
return acc
}
}, 0);
return sum;
}
acc 에다가 더한다는게 아직 명확히 이해는 가지 않음.. 그리고 0) 뒤나 sum뒤에 ; 쓰지 않았을 때 코드에 오류가 생겼다
// acc는 콜백의 반환값을 계속 계속 누적하는 것..
초깃값을 설정해주지 않았더니 대부분 통과하지 못했음. 저 뒤에도 초깃값으 설정해 줄 수 있었고, 꼭 해주어야했따!
문자열을 요소로 갖는 배열을 입력받아 배열에서 가장 긴 문자열을 리턴해야 합니다.
function getLongestElement(arr) {
if (arr.length === 0) {return ''}
let result = arr.reduce(function(i, j){
if (i.length >= j.length){
return i
} else {
return j
}
})
return result
}
처음에 직관적으로 적었던 코드. 물론 전부 통과는 했다
빈배열일 떄의 출력값을 따로 적어주고, reduce 함수를 이용해서 앞 문자열, 뒷 문자열 비교해 출력
function getLongestElement(arr) {
let result = arr.reduce((i, j) =>
i.length >= j.length ? i : j, '')
return result
}
두 번째 코드. 빈 배열의 출력값을 따로 적어주지 않고 초깃값을 '' 로 설정했다.
왜 초깃값이 '' 이면 빈 배열일 때 빈 문자열을 입력해주는 가..
function getLongestElement(arr) {
return arr.reduce((i, j) => i.length >= j.length ? i : j, '')
}
근데 꼭 결괏값을 변수로 지정할 필요가 없잖아? 해서 바로 리턴으로 빼냈다
문자열을 요소로 갖는 배열을 입력받아 배열에서 가장 긴 문자열의 길이를 리턴해야 합니다.
function getLengthOfLongestElement(arr) {
let result = arr.reduce((acc, cur) =>
acc.length >= cur.length ? acc.length : cur.length, 0)
return result
}
첫 번째 거는 클리어했는데,
이상하게도 두 번째 거를 통과하지 못하고 2를 출력했다
왜 2를 출력했을까.. 의문 ㅠㅠ...
function getLengthOfLongestElement(arr) {
if (arr.length === 0) {
return 0;
}
return arr.reduce(function (acc, cur) {
if (acc.length >= cur.length) {
return acc;
} else {
return cur;
}
}).length;
}
2차원 배열(배열을 요소로 갖는 배열)을 입력받아 배열들의 요소를 모두 담고 있는 단일 배열을 리턴해야 합니다.
function joinArrayOfArrays(arr) {
let join = arr.reduce(function(a,b){
return a.concat(b)
})
return join
}
concat 함수 이용.
function joinArrayOfArrays(arr) {
return arr.reduce((a,b) => a.concat(b))
}
배열을 입력받아 배열에서 가장 짧은 길이를 가진 문자열 요소를 리턴해야 합니다.
function findShortestWord(arr) {
let stringFilter = arr.filter (el => typeof el === 'string')
if (!stringFilter.length) return ''
return stringFilter.reduce ((acc,cur) =>
acc.length <= cur.length ? acc : cur)
}
상당한 시행착오를 겪은 문제이다.
일일이 여기다가 적지는 않았지만, 처음엔 바보같이 문제 이해도 못하고 배열들을 냅다까라 비교했고
나중에는 아 이거저거 섞여있으니까 filter로 걸러내어야겠다 생각했다.
그리고 이 문제는 또 초깃값으로는 빈 배열을 출력하지 못 하였고.. (대체 이유가 무엇인가..)
따로 배열의 길이가 존재하지 않는다면.. 빈 배열을 출력하라고 설정해놨다
학생의 정보가 담긴 객체를 요소로 갖는 배열을 입력받아 아래 조건에 맞게 변형된 배열을 리턴해야 합니다.
function studentReports(students) {
let result = [];
let femaleInfo = students.filter(el => el.gender === 'female')
femaleInfo.reduce((acc, cur) => acc + cur.grades)
return result
}
function studentReports(students) {
let femaleInfo = students.filter(el => el.gender === 'female')
femaleInfo.map (function (el) {
let sum = el.grades.reduce (acc, cur => acc + cur, 0)
})
let final = sum / el.grades.length;
return final
}
function studentReports(students) {
let femaleInfo = students.filter(el => el.gender === 'female')
femaleInfo.map (function (el) {
let sum = el.grades.reduce (acc, cur => acc + cur, 0)
})
let final = sum / el.grades.length;
el.grades = final
return el
}
function studentReports(students) {
const femaleInfo = students.filter(el => el.gender === 'female')
return femaleInfo.map (function (el) {
const sum = el.grades.reduce (function(acc, cur) {
return acc + cur
}, 0);
const final = sum / el.grades.length;
el.grades = final;
return el
});
}
거의 레퍼런스 코드 보고 풀었다고 해도 무방한데..
map 옆에 return 이 안 쓰여져서 있어서 아무리 찾아도 방도를 찾지 못했다..
근데 왜 retrun 을 써주어야 하는가..?
2차원 배열(배열을 요소로 갖는 배열)을 입력받아 모든 수(number)의 합을 리턴해야 합니다.
function sumOfArraysInArray(arr) {
const total = arr.reduce((a,b) => a.concat(b))
const onlyNum = total.filter(el => typeof el === 'number')
return onlyNum.reduce((acc, cur) => acc + cur, 0)
}
처음에 'number'를 'Number'로 적고서 아무리봐도 레퍼런스랑 다른게 없어서
화살표 함수 다 지우고 function 입력했는데도 안 되길래 잘 비교해봤더니 그 부분이었음 ㅎ_ㅎ 삽질 그자체