2016-10-30 22 views
0

我已經抓住了我的頭來解決這個問題。我甚至嘗試了lodash,但沒有運氣。面臨的挑戰是使用用戶名列表檢查用戶名單。使用數組列表檢查存在於對象數組中的值

一個用戶名在中間由姓和名的動態變量,以便

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

我想與存在的名稱映射它所以在DB我

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}); 
}); 

如果suggestions數組僅被重寫爲分隔符,則可以使用map方法將每個建議分隔符替換爲具有建議用戶名的對象以及是否被使用,從而將其轉換爲新數組。

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

不錯,但什麼是查找方法,是es6? –

+0

不,它只是另一個Array.prototype方法(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find)。我建議你看看所有的Array.prototype方法,這樣你就可以知道在解決像這樣的問題時你需要使用哪些工具:) – smmaca

相關問題