여러 개의 string을 하나의 변수에 지정하고 싶은데 오류가 생깁니다. - JavaScript
조회수 648회
const arr = ['a', 'b', 'c', 'd', 'e'];
var x = "b" || "d" || "g" || "h" || "z";
const the_number_of_x = arr.filter(i => i === x).length;
if (the_number_of_x === 2) {
console.log("success!")
} else {
console.log("fail!")
}
x
라는 변수에 "b"
와 "d"
가 있고 arr
에도 'b'
, 'd'
총 2개가 있으니까 the_number_of_x
는 2
가 되는 거 아닌가요? 그런데 어째서 "success!"
가 아닌 "fail!"
이 나오는지 모르겠습니다.
알려주시면 감사하겠습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
1.
console.log(x)
해보시면x
는 항상"b"
입니다.자바스크립트에서
A || B
는, "A
가 쓸만하면A
, 아니면B
"를 뜻합니다.
그래서"b" || "d" || "g" || "h" || "z"
는 항상"b"
가 됩니다.
뒤에||
연산이 몇번 정의돼 있든 상관 없이"b"
는 쓸만한(truthy한) 자료거든요.
2. 여러 개의 string을 하나의 변수에 지정한 것은 사실
arr
입니다.여러 개의 문자열을 하나의 변수에 담으려면 어떻게 할까요? 크게 두 가지 방법으로 합니다. 여러 개의 자료를 담는 iterable한 또는 enumeratable한 자료형에 여러 개의 문자열을 담든지, 아니면 특정 구분자로 여러 문자열을 이어붙인 하나의 문자열을 쓰든지.
첫번째 방법이 바로
arr
이고, 두번째 방법은 이를테면 이런 식입니다.let x = "b|d|g|h|z"; let y = x.split('|'); // 결국 y는 배열 → iteratable 한 자료
3. 그래서 원하는 작업은 어떻게 하느냐구요?
arr
같은 걸 하나 더 만들어서 비교하면 됩니다.arr
이 이미 여러 개의 문자열을 '지정한' 하나의 변수거든요. 비슷한 걸 하나 더 만든 다음 둘을 비교하면 되겠지요.// 요약하자면 교집합을 구하는 것이다. 여기를 베꼈음: https://stackoverflow.com/a/1885569 const arr = ['a', 'b', 'c', 'd', 'e']; let x = ["b", "d", "g", "h", "z"]; let arr_and_x = arr.filter(function (n) { return x.indexOf(n) !== -1; }); console.log(arr_and_x.length == 2 ? 'success!' : 'failed!');
댓글 입력