-
Notifications
You must be signed in to change notification settings - Fork 8
/
simplify-path.js
40 lines (37 loc) · 1000 Bytes
/
simplify-path.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Given an absolute path for a file (Unix-style), simplify it.
//
// For example,
// path = "/home/", => "/home"
// path = "/a/./b/../../c/", => "/c"
//
// Corner Cases:
//
//
// Did you consider the case where path = "/../"?
// In this case, you should return "/".
// Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".
// In this case, you should ignore redundant slashes and return "/home/foo".
//
//
/**
* @param {string} path
* @return {string}
*/
var simplifyPath = function(path) {
var pathArr = path.split('/'),
stack = [],
len = pathArr.length;
for (var i = 0;i < len; ++i) {
if (!pathArr[i] || pathArr[i] === '.') {
continue;
}
if (pathArr[i] === '..') {
if (stack.length) {
stack.pop();
}
} else {
stack.push(pathArr[i]);
}
}
return '/' + stack.join('/');
};