2017-11-10 16 views
0

をそれに参加する私は、文字列を持っています:文字列の間の共通worrdを検索し、新しい文字列で

str1 = "A born in 1980" 
str2 = "B born in 1980" 
str3 = "C born in 1988" 

私のように、文字列を形成する必要があります。

それを変換する方法
str 4 = "A and B are born in 1980 and C born in 1988" 

+0

を使用して簡単にsolutioh 1つのライナーですか –

+0

ソリューションの柔軟性はどれくらいですか?私はこれが広すぎると思います! – gurvinder372

+0

これを行うためのlodash関数はありますか? 私は2-3行で解決策を得ることができてうれしいです –

答えて

0

あなたが何をしようとしたのですか?lodash

var inputs = ["A born in 1980", "B born in 1980", "C born in 1988"]; 
 
var res = _(inputs).groupBy(str=>_.words(str)[3]).map((words, year)=>words.map(w=>w[0]).join(' and ') + (words.length > 1 ? ' are ' : ' ') + 'born in ' + year).value().join(' and ') 
 

 
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

0

最初にreduce()を使用して、年ごとにオブジェクトをキーとして取得し、再び文字列を作成することができます。ここで

let str1 = "A born in 1980", 
 
    str2 = "B born in 1980", 
 
    str3 = "C born in 1988" 
 

 
let obj = [str1, str2, str3].reduce(function(r, e) { 
 
    let arr = e.split(' '), n = arr.shift(), y = arr.pop(); 
 
    if (!r[y]) r[y] = n; 
 
    else r[y] = [].concat(r[y], n); 
 
    return r; 
 
}, {}) 
 

 
let r = Object.keys(obj).reduce(function(r, k) { 
 
    if (Array.isArray(obj[k])) { 
 
    r += (r.length ? ' ' : '') + obj[k].join(' and ') + ' are born in ' + k; 
 
    } else { 
 
    r += ' and ' + obj[k] + ' is born in ' + k 
 
    } 
 
    return r; 
 
}, '') 
 

 
console.log(r)

関連する問題