-
Notifications
You must be signed in to change notification settings - Fork 2
-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[06_week] users에서 원하는 값을 도출하기3 #6
Comments
_.go(users,
_.filter(u => u.city !== 'busan' && u.blood === 'O'),
_.sortBy(v => -v.age),
_.first(3),
_.pluck('name'),
_.log
); |
function reverse(list) {
return _.reduceRight(list, (prev, cur) => _.append(prev, cur), []);
}
function take(list, n) {
return _.filter(list, (val, index) => index < n)
}
_.go(users,
_.reject(__(_.val("city"), _.isEqual("busan"))),
_.filter(__(_.val("blood"), _.isEqual("O"))),
_.sortBy("age"),
reverse,
_(take, _, 3),
_.log
)
function go() {
var i = 0, fs = arguments, len = fs.length, res = arguments[0];
while (++i < len) {
res = res instanceof Promise ? res.then(fs[i]) : (fs[i](res))
}
return res;
} |
function mm(func) {
const cache = new Map();
return arg => cache.has(arg)
? console.log("본체 실행"), cache.set(arg, func(arg)), cache.get(arg)
: console.log("캐시 실행"), cache[arg];
}
var mult5 = mm(function(a) { return a * 5; });
console.log( mult5(1) ); // 본체 실행, 5
console.log( mult5(2) ); // 본체 실행, 10
console.log( mult5(1) ); // 캐시 실행, 5 |
function memoize(fn) {
var cache = new Map();
return function (...args) {
var hashed_args = args.join("|");
if (cache.has(hashed_args)) {
return cache.get(hashed_args);
}
cache.set(hashed_args, fn(...args));
return cache.get(hashed_args);
}
} |
var count = 0;
_.go(users,
_.sort_by('age'),
arr => arr.reverse(),
_.reject(arr => {
count++;
return arr.city === 'busan'}),
_.filter(arr => {
count++;
return arr.blood === 'O'}),
_.map(arr => {
count++;
return arr.name}),
_.take(3),
_.log)
console.log(count); // 36
var count = 0;
_.go(users,
_.sort_by('age'),
arr => arr.reverse(),
lz.reject(arr => {
count++;
return arr.city === 'busan'}),
lz.filter(arr => {
count++;
return arr.blood === 'O'}),
lz.map(arr => {
count++;
return arr.name}),
lz.take(3),
_.log)
console.log(count); // 16
var lz = {};
function lz_add(...fns) {
return list => {
if (list.is_lazy) return list.push(fns), list;
var lazy = [fns];
lazy.data = list;
lazy.is_lazy = true;
return lazy;
}
}
lz.map = fn => lz_add(fn, map)
lz.filter = fn => lz_add(fn, filter)
lz.reject = fn => lz_add(fn, reject)
lz.take = limit => {
return lazy => {
let i = -1, ll = lazy.length, dl = lazy.data.length, res = [];
while (++i < dl) {
let j = 0, v = lazy.data[i], rev = lazy[j][1]([v], lazy[j][0])[0];
while (++j < ll) {
if (rev) rev = lazy[j][1]([v], lazy[j][0])[0];
}
if (rev) res.push(rev);
if (res.length === limit) return res;
}
}
}
function asy_go() {
var fs = arguments, i = 0, len = arguments.length;
return function f(res) {
if (res && res.then) return res.then(f);
if (i < len) return f(fs[i++](res));
return res;
}(arguments[i++]);
};
function memoize(fn, hasher) {
f.cache = {};
function f(...args) {
let key = hasher(...args);
if (!has(f.cache, key)) return f.cache[key] = fn(...args);
return f.cache[key];
}
return f;
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
users
에서 원하는 값을 도출하기!users
원하는 값
_.sortBy
,_.reject
,_.filter
,_.take
(==_.first
)유의 사항
시간이 된다면
go
함수를 비동기 제어가 가능한 함수로 만들어보세요.The text was updated successfully, but these errors were encountered: