Skip to content

Instantly share code, notes, and snippets.

@jjori-master
Last active April 26, 2021 18:11
Show Gist options
  • Save jjori-master/c6837fbf32f5390a9ed183750bdaf934 to your computer and use it in GitHub Desktop.
Save jjori-master/c6837fbf32f5390a9ed183750bdaf934 to your computer and use it in GitHub Desktop.
if (1) {
// 1번과제 [1, 2, 3, 4, 5, 6, 7].filter(it=> it%2).map(it=>it*2) 7회로 해결하기 입니다.
let cnt = 0;
const generator = function* (arr) {
for (let i = 0; i < arr.length; i++) {
cnt++;
if (arr[i] % 2) {
yield arr[i] * 2;
}
}
};
const [...res] = generator([1, 2, 3, 4, 5, 6, 7]);
console.log(res);
console.log(cnt);
}
if (1) {
// 2번 과제
// https://gist.github.com/hikaMaeng/3944b4b75bf8a42f4814de0e8bb56e1d
// 미완 코드 완성하기
// 거의 유투브를 보며.. 보고 그대로 쳤네요 ㅠ
const stringCheck = [
[/[\r\n\l]/g, "\\n"],
[/"/g, '\\"', [/\t/g, "\\t"]],
];
const el = {
number: (v) => v.toString(),
boolean: (v) => v.toString(),
string: (v) => {
for (let i = 0; i < stringCheck.length; i++) {
v = v.replace(stringCheck[0], stringCheck[1]);
}
return v;
},
stringify(v) {
return this[typeof v]?.(v) ?? "null";
},
};
const objEntries = function* (obj) {
for (const k in obj) if (obj.hasOwnProperty(k)) yield [k, obj[k]];
};
const accToString = (isObject, acc) => {
const [START, END] = isObject ? "{}" : "[]";
let result = "";
if (acc.prev) {
let curr = acc;
do {
if (isObject) {
result =
`,"${curr.value[0]}":${el.stringify(curr.value[1])}` + result;
} else {
result = `,${curr.value}` + result;
}
} while ((curr = curr.prev));
result = result.substr(1);
}
return START + result + END;
};
const recursive = (iter, isObject, acc, prev) => {
const { done, value } = iter.next();
if (!done) {
const v = isObject ? value[1] : value;
switch (true) {
case Array.isArray(v):
return recursive(v[Symbol.iterator](), false, null, {
target: iter,
isObject,
k: isObject ? value[0] : "",
acc,
prev,
});
case v && typeof v == "object":
return recursive(objEntries(v), true, null, {
target: iter,
isObject,
k: isObject ? value[0] : "",
acc,
prev,
});
default:
return recursive(iter, isObject, { prev: acc, value }, prev);
}
} else {
const accStr = accToString(isObject, acc);
if (prev) {
return recursive(
prev.target,
prev.isObject,
{ prev: prev.acc, value: prev.isObject ? [prev.k, accStr] : accStr },
prev.prev
);
} else {
return accStr;
}
}
};
const stringify = (v) => {
const iter = Array.isArray(v) ? v[Symbol.iterator]() : objEntries(v);
const isObject = !Array.isArray(v);
return recursive(iter, isObject, null, null);
};
stringify({ a: 3, b: 5, c: [1, 2, [3, 4, { a: 4, b: 5 }, 7], 3], d: 3 });
}
@hikaMaeng
Copy link

필터와 맵을 분리된 제네레이터로 작성하세요

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment