给一个混入了很多.和..的path,得到其绝对路径
先看bash realpath结果
MacBook-Pro-5:bin luyu$ realpath /opt/X11/./../X11/.././X11/var/./log/../.././bin/
/opt/X11/bin
我来用js实现
var path = '/opt/X11/./../X11/.././X11/var/./log/../.././bin/'; >>undefined var str = []; >>undefined var arr = path.split('/'); >>undefined for (var i = 1; i < arr.length; i++) { if (arr[i] === '.') continue; if (arr[i] === '..') { str.pop(); } else { str.push(arr[i]); } } >>4 '/' + str.join('/'); >>"/opt/X11/bin/"
代码很简单,设一个结果数组arr,用split将path分离后遍历元素。.代表当前路径,..代表上级路径,其他都是正常路径。所以处理方法是:
- 正常路径,直接push到arr里。push的尾部即代表已到达的最后路径
- .可以忽略
- ..代表回到上级路径,则最后路径失效,回到上一级,pop弹出