Maverick
Maverick

Reputation: 1123

Javascript - Array pop and get first part of array

I have a path and I am trying to pop off everything after the last /, so 'folder' in this case, leaving the newpath as C://local/drive/folder/.

I tried to pop off the last / using pop(), but can't get the first part of the path to be the new path:

var path = C://local/drive/folder/folder
var newpath = path.split("/").pop();
var newpath = newpath[0]; //should be C://local/drive/folder/

How can I accomplish this?

Upvotes: 2

Views: 6332

Answers (5)

user3429707
user3429707

Reputation: 55

If you want to get the first part of the array.

var firstWord = fullnamesaved.split(" ").shift();

This disregards all things after the space.

Upvotes: 1

Rubens Mariuzzo
Rubens Mariuzzo

Reputation: 29241

Just replace the last statement to be like that:

var path = C://local/drive/folder/folder
path.split("/").pop(); // Discard the poped element.
var newpath = path.join("/"); // It will be C://local/drive/folder

A note about Array.pop: Each time you call the pop method it will return the last element and also it will remove it from the array.

Upvotes: 2

jfriend00
jfriend00

Reputation: 707426

Could also use a regex:

function stripLastPiece(path) {
    var matches = path.match(/^(.*\/)[^\/]+$/);
    if (matches) {
        return(matches[1]);
    }
    return(path);
}

Working example: http://jsfiddle.net/jfriend00/av7Mn/

Upvotes: 1

GottZ
GottZ

Reputation: 4947

var foo = "C://local/drive/folder/folder";
foo.match(/(.+\/)[^\/]+$/);

would result in: ["C://local/drive/folder/folder", "C://local/drive/folder/"]

though i would prefer user1689607's answer

Upvotes: 0

I Hate Lazy
I Hate Lazy

Reputation: 48761

Use .slice() instead of pop()

var newpath = path.split("/").slice(0, -1).join("/");

If you also need the last part, then just use .pop(), but first store the Array in a separate variable.

var parts = path.split("/");

var last = parts.pop();
var first = parts.join("/");

Now last has the last part, and first has everything before the last part.


Another solution is to use .lastIndexOf() on the string.

var idx = path.lastIndexOf("/");

var first = path.slice(0, idx);
var last = path.slice(idx + 1);

Upvotes: 5

Related Questions