-
Array.forEach()STUDY/프론트엔드 2021. 5. 6. 15:33
개발을 하면서 아래와 같이 객체의 invalid를 check할 때 Array.forEach()를 사용했는데, subject.Name에 값이 없어도 함수가 반환되지 않고 다음 동작을 실행하는 문제가 발생했다.
isInvalid(grade) {
if (this.$StringUtils.isBlank(grade.name)) {
return true;
}
grade.subjectList.forEach(subject -> {
if (this.$StringUtils.isBlank(subject.Name)) {
return true;
}
});
if (this.$StringUtils.isBlank(grade.year)) {
return true;
}
return false;
}return true/false를 하면 다른곳에서 사용하는 것과 같이 함수가 호출한 곳으로 반환될 것이라 생각했는데, 찾아보니까 Array.forEach()에서의 return true/false는 continue/break와 같은 방식으로 사용된다고 나왔다.
아래와 같이 for문으로 변경해서 문제를 해결할 수 있었다.
for (let i = 0, length = grade.subjectList.length; i < length; i++) {
let subject = grade.subjectList[i];
if (this.$StringUtils.isBlank(subject.Name)) {
return true;
}
}
* Array.forEach(), Array.every(), Array.some()에서의 return true/false 동작
1. Array.forEach()
- return true/false 둘 다 continue를 의미한다.
- forEach() 자체의 return은 undefined이다.
["a","b","c","d","e"].forEach(function(value, index){
if (value=="b") return true;
console.log(value);
});
[결과]
a
c
d
e
< undefined
["a","b","c","d","e"].forEach(function(value, index){
if (value=="b") return false;
console.log(value);
});
[결과]
a
c
d
e
< undefined2. Array.event()
- return true는 continue, false는 break를 의미한다.
["a","b","c","d","e"].every(function(value, index){
if (value=="a") return false;
console.log(value);
});
[결과]
["a","b","c","d","e"].every(function(value, index){
if (value=="a") return true;
console.log(value);
});
[결과]
b- every() 자체의 return은 모든 callback function의 반환값이 true 여야 true, 아니면 false이다.
const isBelowThreshold = (currentValue) => currentValue < 40;
const array1 = [1, 30, 39, 29, 10, 13];
console.log(array1.every(isBelowThreshold));
[결과] : true
const isBelowThreshold = (currentValue) => currentValue < 30;
const array1 = [1, 30, 39, 29, 10, 13];
console.log(array1.every(isBelowThreshold));
[결과] : false3. Arrya.some()
- return true는 break, false는 continue를 의미한다.
["a","b","c","d","e"].every(function(value, index){
if (value=="b") return true;
console.log(value);
});
[결과]
a
["a","b","c","d","e"].every(function(value, index){
if (value=="a") return false;
console.log(value);
});
[결과]
a
c
d
e- some() 자체의 return은 callback function에 의해 하나라도 return true 가 나오면 true, 아니라면 false이다.
const array = [1, 2, 3, 4, 5, 6];
const even = (element) => element % 6 === 0;
console.log(array.some(even));
[결과] : true
const array = [1, 2, 3, 4, 5];
const even = (element) => element % 6 === 0;
console.log(array.some(even));
[결과] : false'STUDY > 프론트엔드' 카테고리의 다른 글
JavaScript : Array (0) 2021.06.02 Vue.js (0) 2021.04.28 Ajax Cache (0) 2021.04.28 Cookie (0) 2021.02.08 History.replaceState() (0) 2021.02.04