const str = "hello world";
const arr = [...str]
console.log(Array.isArray(arr))
console.log(arr);
true
[
'h', 'e', 'l', 'l',
'o', ' ', 'w', 'o',
'r', 'l', 'd'
]
const str = 'ilikeapple'
const arr = Array.from(str);
console.log(arr);
[
'i', 'l', 'i', 'k',
'e', 'a', 'p', 'p',
'l', 'e'
]
const str = 'ilikeapple'
const arr = str.split('');
console.log(arr);
[
'i', 'l', 'i', 'k',
'e', 'a', 'p', 'p',
'l', 'e'
]
const arr = ['tiger', 'likes', 'cereal'];
const str1 = arr.join();
const str2 = arr.join('-');
const str3 = arr.join('');
console.log(str1)
console.log(str2)
console.log(str3)
tiger,likes,cereal
tiger-likes-cereal
tigerlikescereal
코딩 테스트 문제를 풀다가 갑자기 readline이라는 걸 사용한 문제가 나오길래 뭔가 싶어서 공식 문서를 들어가 봤더니
Readable 스트림에서 한번에 한줄씩 데이터를 읽기 위한 인터페이스를 제공한다.
라는 글과 함께 node:readline
사용법이 적혀있었다.
import * as readline from 'node:readline/promises';
import { stdin as input, stdout as output } from 'node:process';
const rl = readline.createInterface({ input, output });
const answer = await rl.question('What do you think of Node.js? ');
console.log(`Thank you for your valuable feedback: ${answer}`);
rl.close();
코딩 테스트 문제와는 전혀 다른 방식으로 적혀 있어서 조금 혼란스러웠다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = []
rl.on('line', function (line) {
input = line.split(` `);
rl.close();
}).on('close', function () {
for (let i = 1; i <= input[0]; i++ )console.log('*'.repeat(i));
});
여기는 rl.on도 있고 createInterface
내용도 살짝 다르다.
다른 블로그를 통해 알아본 결과
rl.on
이 on()메서드를 호출해서 이벤트와 콜백함수를 전달하는데 여기서 사용된 이벤트가 line
과 close
라는 이벤트인 것이다.
'line'이벤트는 스트림 이 input라인 끝 입력( , 또는 )을 수신 \n할 \r때 마다 발생합니다
해당 이벤트는 스트림에서 새 데이터를 읽었고 해당 스트림이 최종 줄 끝 표시 없이 끝나는 경우에도 발생한다.
수신된 입력의 한줄을 포함하는 문자열로 호줄된다.
다시 말해서 사용자가 값을 입력하면 발생하는 것으로 생각하면 될것 같다.
해당 이벤트는 다음 나열한 상황중 하나가 발생하면 일어나는 이벤트이다.
end
이벤트가 발생했을 때ctrl+D
를 눌러서 EOT를 발생시킬때 (end-of-trnasmission)ctrl+C
를 눌러서 SIGINT
신호를 보냈을 때,코딩테스트 문제는 직각삼각형 만들기라는 문제(https://school.programmers.co.kr/learn/courses/30/lessons/120823)
였는데 이제 다시 코드를 정리해보면
input
이라는 빈 배열이 존재하고 사용자가 값을 입력하면 split
을 통해서 input배열을 문자열로 만들고 close()메서드를 호출!
rl.on
의 close 부분에서 사용자가 입력한 데이터를 통해 가공된 input
을 가지고 명령을 수행하는 것이다. 내 경우에는 repeat()메서드를 사용한 *
반복출력하기!
확실이 검색을해보고 다시 내용을 보니까 이해가 더 잘 되는 것 같다..... 아마도?
참고한 블로그 출처 : https://velog.io/@leenzy/readline-%EB%AA%A8%EB%93%88-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0