2016-08-11 2 views
0

Я разделил строку "/" и "/something" на .split("/"), и я хочу получить длину, но ее же: 2. Как я могу это различить? Идеально "/".length == 0 и "./something" == 1 Любые советы?Как получить разную длину разделенной строки «/» и «/ something»

+1

Просьба поделиться ссылкой – brk

+0

Можете ли вы опубликовать код, необходимый для воспроизведения проблемы? – Pugazh

+0

'pathName.split ("/"). Length' возвращает 2 и' let pathName = "/" ' –

ответ

1

Если строка должна иметь/зарегистрировать 1

var countThem = function countThem0(str, sep) { 
    return str.indexOf(sep) < 0 ? 0 : str.split(sep).filter(function (e) { 
     return e.length; 
    }).length; 
}; 

В противном случае

var countThem = function countThem(str, sep) { 
    return str.split(sep).filter(function (e) { 
     return e.length; 
    }).length; 
}; 

В ES2015, это даже аккуратнее

let countThem = (str, sep) => str.indexOf(sep) < 0 ? 0 : str.split(sep).filter(e => e.length).length; 

или

let countThem = (str, sep) => str.split(sep).filter(e => e.length).length; 
0

Поскольку пустая строка falsy, вы можете использовать !"", чтобы решить, будет ли или не считать вас эта строка:

function myFunc(str){ 
 
    var parts = str.split('/'), 
 
     i = 0; 
 
    while(i<parts.length){ 
 
    // if the current String is empty, remove it from the array 
 
    if(!parts[i]) parts.splice(i, 1); 
 
    else i++; 
 
    } 
 
    return parts.length; 
 
} 
 

 
console.log(myFunc('zero')); // 0 
 
console.log(myFunc('/'));  // 0 
 
console.log(myFunc('/one')); // 1 
 
console.log(myFunc('one/two')); // 2 
 
console.log(myFunc('1/2/3///'));// 3

Вы также можете использовать filter для ... фильтровать эти элементы :

function myFunc(str){ 
 
    return str.split('/').filter(function(part){return !!part}).length; 
 
} 
 

 
console.log(myFunc('zero')); // 0 
 
console.log(myFunc('/'));  // 0 
 
console.log(myFunc('/one')); // 1 
 
console.log(myFunc('one/two')); // 2 
 
console.log(myFunc('1/2/3///'));// 3

+0

Нет ничего более просто?? –

+0

не должен 'myFunc (" zero ")' result be 1? –

+0

@JaromandaX Возможно, вы правы, я думал, что он может захотеть 0, если строка не содержит косой черты, но было бы разумно вернуть 1 – blex

0

Вы можете сделать это.

var str = "/"; 

str.split('/').join('') // always "" which equal false if there is only '/' 

var str1 = "/somthing"; 

str1.split('/').join('') // always non-empty if string not contain only '/' character 
Смежные вопросы