2016-04-12 11 views
0

私はこれを解決しましたが、良い方法があるかどうかを調べるために探していますこれを行うには。 Fiddle - https://jsfiddle.net/143h9wrq/だから、2 + Idがあるかどうかを確認し、文字列を配列に変換し、最後の配列項目を取り出し、 'and'を追加して戻して表示します。Stringに最後の単語に "and"を追加する - js/Angular

私はそれを凝縮するより良い方法があるかどうかを見ています。この例ではなく、プロジェクトでAngularを使用しています。基本的にlistArrは$ scope.listArr、issueは$ user.issuesです。

JS:

var issuesId =[1,2,3,4] 
var issues = "issue one, issue two, issue three, issue four"; 

if (issuesId.length >= 2) { 
    var str = issues.split(', '); 
    var addAnd = str.pop(); 
    addAnd = 'and ' + addAnd; 
    str.push(addAnd); 
    var listArr = str.join(', '); 
    document.getElementById('text').innerHTML = listArr; 
} 
else { 
    var listArr = issues; 
    document.getElementById('text').innerHTML = listArr; 
} 

HTML:str[str.length - 1] = 'and ' + str[str.length - 1]

<p>{{listArr}}</p> 
+0

私はあなたのアプローチが有効 – cor

+0

よりだけだと思います私があなたのアプローチで見ている問題は、必要でないときに 'と'の前に '、'を挿入するので、正しくない文で終わることです。 – GillesC

+0

この質問は 'angularjs'の下にタグ付けされています - そのアプローチはanglejsのアプローチのようなものではありません –

答えて

3

最短ソリューションは、正規表現を次のようになります。

var s = "a, b, c"; 

s.replace(/ ([^,]*)$/, " and $1"); // "a, b, and c" 

か:

s.replace(/, ([^,]*)$/, " and $1"); // "a, b and c" 
+0

これは完璧なおかげです。時間があれば、何が何をするのかを簡単に概観しておきましょう。私は以前RegExを使用していましたが、https://regex101.com/を愛していますが、何をしているのか常に忘れています:] – RooksStrife

3

はなぜpopingと、このように、再びそれを押さずに、直接配列から、配列の最後の要素を変更しませんか?

var issuesId = [1, 2, 3, 4] 
var issues = "issue one, issue two, issue three, issue four"; 

var listArr = issues; 

if (issuesId.length >= 2) { 
    var str = issues.split(', '); 
    str[str.length - 1] = 'and ' + str[str.length - 1]; 
    listArr = str.join(', '); 
} 

document.getElementById('text').innerHTML = listArr; 
0

より機能的なスタイル:

私はまた、コード行の束を下にトリミングされてきました。このお試しください:

function mkStr(issues) { 
    var delimeter = ', '; 
    if (issues.length < 2) { 
     return issues; 
    } else { 
    let parts = issues.split(delimeter); 
    let last = "and " + parts.pop(); 
    parts.push(last); 
    return parts.join(delimeter); 
    } 
} 

document.getElementById('text').innerHTML = mkStr(issues); 

mkStr("a, b, c"); // "a, b, and c" 

しかし、多分、あなたはかなり欲しい:一般

var issuesId =[1,2,3,4] 
var issues = "issue one, issue two, issue three, issue four"; 

if(issuesId.length >= 2){ 
    var arr = issues.split(','); 

    arr = arr.map(function(phrase, index){ 
    if(index < arr.length - 1) 
    phrase+=' and'; 
    return phrase; 
    }) 
    issues = arr.join(', '); 
} 

console.log(issues); 

http://codepen.io/gpincheiraa/pen/bpLJdv

0

を、私は実際のDOM操作からそれを分離し、関数に文字列操作をラップしたいです「a、b、c」をアウトプットとして持つことが、これはもっと自然なことです。そして、あなたはこのような何かができる:

function mkStr2(issues) { 
    var delimeter = ', '; 
    if (issues.length < 2) { 
     return issues; 
    } else { 
    let parts = issues.split(delimeter); 
    let last = parts.pop(); 
    return parts.join(delimeter) + 
      " and " + 
      last; 
    } 
} 

mkStr2("a, b, c"); // "a, b, and c" 
関連する問題