2017-10-24 3 views
1

文字列を区切り記号( '/')で区切るJavaScript関数を記述しようとしていて、そのパスの組み合わせを配列に戻したいと考えました。文字列を分割して配列内の組み合わせを返すJavaScript関数

入力:

"グローバル/ヨーロッパ/英国/ロンドン"

所望の出力:

[ "グローバル"、 "グローバル/ヨーロッパ"、「グローバル/ヨーロッパ/英国"]

私は以下の再帰関数を試しましたが、何らかの理由で配列に単一の値しか含まれていませんでした。

function splitPath(str) { 
    var output = []; 
    if (str.lastIndexOf('/') !== -1) {   
     str = str.split("/").slice(0, -1).join("/"); 
     output.push(str); 
     splitPath(str); 
    } 
    //console.log(output); 
    return output; 
} 

JavaScriptでこれを実現する方法があれば教えてください。

ありがとうございました。

答えて

4

Array#reduce

let input = "Global/Europe/UK/London"; 
 
let output = input.split("/").slice(0, -1).reduce((acc, item, index) => { 
 
    acc.push(index ? acc[index - 1] + '/' + item : item); 
 
    return acc; 
 
}, []); 
 

 
console.log(output);

3

最後のものがない部分だけを使用して、文字列とマップを最初から分割することができます。

var string = "Global/Europe/UK/London", 
 
    grouped = string 
 
     .split('/') 
 
     .slice(0, -1) 
 
     .map(function (_, i, a) { 
 
      return a.slice(0, i + 1).join('/'); 
 
     }); 
 

 
console.log(grouped);

1

ここで分割して、反復的に部品を追加する方法です。これについて

function splitPath(str) { 
 
     const parts = str.split("/"); 
 
     let head = parts.shift(); 
 
     const result = [head]; 
 
     for (const part of parts) { 
 
      head += "/" + part; 
 
      result.push(head); 
 
     } 
 
    
 
     return result; 
 
    } 
 
    
 
    console.log(splitPath("Global/Europe/UK/London"))

1

どうしますか?使用

let output = []; 
    let input = str.split('/'); 
    input.reduce((acc,v, i, arr) => { output.push(acc + "/"+ v); return acc + "/"+ v; }) 
1
'Global/Europe/UK/London' 
    .split('/') 
    .map(
     (item, i, items) => { 
      return items.slice(0, i+1).join('/'); 
     } 
    ) 
関連する問題