💡 덧셈, 뺄셈 수식들이 'X[연산자]Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해주세요.
입출력 예시
quiz | result |
---|---|
["3 - 4 = -3", "5 + 6 = 11"] | ["X", "O"] |
["19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"] | ["O", "O", "X", "O"] |
function solution1(quiz) {
let answer = [];
quiz.map((i) => {
eval(i.split("=")[0]) == i.split("=")[1]
? answer.push("O")
: answer.push("X");
});
return answer;
}
eval()
사용
문제를 풀고나니.. eval가 아주 위험한 함수인 것을 알아버렸다. . .
eval()은 문자로 표현된 Javascript 코드를 실행하는 함수인데, eval는 지양하는 것이 좋다.
🚫 eval()은 인자로 받은 코드를 caller의 권한으로 수행하는 위험한 함수로, 악의적인 영향을 받았을 수 있는 문자열을 eval()로 실행한다면, 악의적인 코드를 수행하는 결과를 초래할 수 있다. 🚫
그리고, ===와 == 구분 잘해주자
===은 타입까지 비교해주는 연산자 !
+a와 +b 는 a,b 각각에 할당된 문자열을 숫자열로 변환
function solution(quiz) {
var answer = [];
return quiz.map(t => {
const [calc, result] = t.split("=");
const sign = calc.includes("+") ? 1 : -1
const [a, b] = calc.split(sign === 1 ? "+" : "-");
return +a + (+b * sign) === +result ? "O" : "X"
});
}