index
메소드 같은 걸 사용하지 않고, for
와 if
로만 구현function findKen(arr) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === "Ken") {
return `켄은 ${i}에 있다`;
}
}
}
- 처음에 실수로 if 조건문에
arr[i] = 'Ken'
이라고 넣어서 정상 작동이 안됐다. 이 실수를 은근히 자주 한다 조심하자
function repeatVaco(n) {
let result = '';
if (n%2) {
result += '바'
for (let i = 1; i <= (n-1)/2; i++) {
result += '코바';
}
return result;
}
for (let i=1; i<= n/2; i++) {
result += '바코';
}
return result;
}
- 처음에 홀수일때 '코바' 를 더하는 실수를 했다
- for 조건문에 )를 하나 더 끼어서 정상적인 실행이 안되는 실수를 했다
function findMinNumber(arr) {
let minNum = arr[0];
for (let i = 1; i < arr.length; i++) {
if (arr[i] < minNum) {
minNum = arr[i];
}
}
return minNum;
}
function doubleArray(arr) {
return [...arr, ...arr];
}
function doubleArray(arr) {
for (let i = 0; i < arr.length; i++) {
arr[i+arr.length] = arr[i];
}
return arr;
}
function doubleArray(arr) {
let newArr = arr;
for (let i = 0; i < arr.length; i++) {
newArr[i+arr.length] = arr[i];
}
return newArr;
}
- 첫번째 코드에서 arr.length가 계속 증가해서 무한로딩이 걸리는것같아 수정한 코드에서는 arr.length가 더이상 늘어나지 않도록 새로운 변수를 선언했는데도 똑같이 무한 로딩이 걸렸다 ㅠ
- 생각해보니 객체는 깊은복사를 하지않으면 데이터가 있는 주소값만 복사하기에 결국 newArr의 값이 변하면서 arr값도 변해서 수정한 코드도 무한 로딩이 생긴것같았다.
단순 주소복사
for 문은 통한 깊은복사
function doubleArray(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
newArr[i] = arr[i];
newArr[i + arr.length] = arr[i];
}
return newArr;
}
- for문을 통해 newArr와 arr가 서로 다른 주소를 바라보게 해줬더니 정상적인 결과가 나왔다
function splitNumber(num) {
let arr = [];
let cipher = 1;
for (let i = 1; num % 10 ** i !== num; i++) {
cipher = i + 1;
}
for (let i = 0; i < cipher; i++) {
arr[i] = (num - num % 10 ** (cipher - (i + 1))) / 10 ** (cipher - (i + 1));
num = num % 10 ** (cipher - (i + 1));
}
return arr;
}
- arr 메소드를 사용 안하므로 해당 인덱스에 값을 할당해주는 방식으로 for문을 쓰려함
- 그러기위해선 먼저 자릿수가 필요해서 자릿수 변수를 먼저 선언하고 할당해줌
- 각 자리 숫자를 얻기위해 10의 거듭제곱으로 나눈 몫이 필요했는데 자바스크립트에는 나머지를 구하는
%
연산자 뿐이라, 먼저 그 나머지를 구해 원래 수에서 빼준후 다시 10의 거듭제곱으로 나눠 몫을 구했음
- 처음에 자릿수 구하는 식을 착각을 해서 false가 나올때의 i를 cipher에 할당해놨는데 생각해보니 for문은 2번 루트가 false가 나면 3번루트가 아예 안돌았음. 그래서 false가 나면 그 전 루프때의 i값에 +1한게 자릿수가 되므로 코드를 수정해줌
function createArray(arr1, arr2) {
let newObj = {};
for (let i = 0; i < arr1.length; i++) {
newObj.arr1[i] = arr2[i];
}
return newObj;
}
- 객체에 키와 밸류를 추가하는 방법은 두가지
obj.a
와obj['a']
가 있는데 객체에서 불러온 요소가 스트링값이였는데 두번째 방법이 아닌 첫번째 방법을 써서 마치obj.'a'
이런식으로 적용이 된거라 오류가 난거 같았다
function createArray(arr1, arr2) {
let newObj = {};
for (let i = 0; i < arr1.length; i++) {
newObj[arr1[i]] = arr2[i];
}
return newObj;
}
안녕하세요. 코딩공부하는 학생인데 블로그 보면서 공부하고 있습니다.
혹시 괜찮으시다면 질문을 해도 될까요?
바코바코바 문제에서
function repeatVaco(n) {
let result = '';
if (n%2) {
result += '바'
for (let i = 1; i <= (n-1)/2; i++) {
result += '코바';
}
return result;
}
for (let i=1; i<= n/2; i++) { // 여기서부터는 if 절에서 false일 때 실현되는 코드인가요? 혹시 else없이도 사용할 수 있나요?
result += '바코';
}
return result;
}