2016-10-30 4 views
0

私はこれを解決する頭を傷つけました。私もlodashを試したが、運はなかった。課題は、ユーザ名のリストでユーザ名のリストをチェックすることです。配列のリストを使用してオブジェクトの配列に存在する値を確認する

ユーザ名がそのように

const suggestion_username = [ 
    fname + "&" + lname, 
    fname + "+" + lname, 
    fname + "." + lname, 
    fname + lname 
] 

途中で動的変数で最初と最後の名前で構成され、私は私が

const existed_name = [ 
{username:'something'}, 
{username:'john.james'}, 
{username:'johnjames'} 
] 

を持ってデシベルでのように、存在していた名前でマップしたいので、もし私はこのような何かをしようとするだろう

[ 
     {username:fname + "&" + lname,taken:0}, 
     {username:fname + "+" + lname,taken:0}, 
     {username:fname + "." + lname,taken:1}, //taken 
     {username:fname + lname,taken:1}, //taken 
    ] 
+0

あなたは何をしようとしたのですか? –

+0

は_.mapと_.eachを試しました。あなたは私のうんざりの解決策がうまくいかないことを見てほしくないでしょう。 –

答えて

0

になりたい結果:

const fname = 'John'; 
const lname = 'James'; 

const suggestions = [ 
    "&", "+", ".", "" 
]; 

const available_usernames = suggestions.map((sep) => { 
    const genUsername = {username: `${fname}${sep}${lname}`}; 
    if (existed_username.find(username => username === genUsername.username)) { 
     return Object.assign(genUsername, {taken: 1}); 
    } 
    return Object.assign(genUsername, {taken: 0}); 
}); 

提案配列が区切り文字としてのみ書き換えられる場合は、マップメソッドを使用して、各候補区切り文字を推奨されたユーザー名と取られるかどうかのオブジェクトで置き換えることで新しい配列にすることができます。

findメソッドは、条件を満たす(つまり、提案されたユーザー名が既存のユーザー名と一致する)、または未定義の配列の最初の要素を返します。これを使用して、新しい配列の各オブジェクトに取り込まれたフィールドを設定することができます。

出力は次のようになります。

[ 
    {username: 'John&James', taken: 0}, 
    {username: 'John+James', taken: 0}, 
    {username: 'John.James', taken: 1}, 
    {username: 'JohnJames', taken: 1}, 
] 

はここで働くのペンを参照してください:http://codepen.io/Smmaca/pen/gwNRKK?editors=0011

+0

いいですが、findメソッドは何ですか、それはes6ですか? –

+0

いいえ、別のArray.prototypeメソッド(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find)です。私はすべてのArray.prototypeメソッドを見ることをお勧めしますので、このような問題を解決する際にどのツールを使用しなければならないかを知ってください:) – smmaca

関連する問題