标签:
Previous post: http://www.cnblogs.com/Answer1215/p/4990418.html
let input, config, tasks; input = [‘dist‘]; config = { "dist": ["build", "deploy"], "build": [‘js‘, ‘css‘, ‘vender‘], "js": [‘babel‘, ‘ng-Annotate‘, "uglify"], "css": ["sass", "css-min"] }; tasks = []; getTasks(input); function getTasks(input){ input.forEach((task)=>{ if(config[task]){ getTasks(config[task]); }else{ tasks.push(task); } }) }; console.log(tasks);
The getTasks works but has some problem:
let input, config, tasks; input = [‘dist‘]; config = { "dist": ["build", "deploy"], "build": [‘js‘, ‘css‘, ‘vender‘], "js": [‘babel‘, ‘ng-Annotate‘, "uglify"], "css": ["sass", "css-min"] }; tasks = []; var res = getTasks(input, []); function getTasks(input, initial){ return input.reduce((prev, next)=>{ if(config[next]){ return getTasks(config[next], prev); }else{ return prev.concat(next); } }, initial); }; console.log(res);
The code has been improved, we return the value from the getTasks() function and we don‘t modify the tasks array anymore.
Just one thing we still need to do is we still depend on ‘config‘:
let input, config; input = [‘dist‘]; config = { "dist": ["build", "deploy"], "build": [‘js‘, ‘css‘, ‘vender‘], "js": [‘babel‘, ‘ng-Annotate‘, "uglify"], "css": ["sass", "css-min"] }; var res = getTasks(config, input, []); function getTasks(config, input, initial){ return input.reduce((prev, next)=>{ if(config[next]){ return getTasks(config ,config[next], prev); }else{ return prev.concat(next); } }, initial); }; console.log(res);
[Javascript] Intro to Recursion - Refactoring to a Pure Function
标签:
原文地址:http://www.cnblogs.com/Answer1215/p/5055914.html