2017-03-19 12 views
3

質問は、名前の文字列から4文字の名前を返すことです。配列から指定された長さの文字を持つオブジェクトを返す方法は?

これは、これまでの私のコードです:

var friends = "Ryan, Kat, Luke, Harry"; 
 
var newFriends = friends.split(","); 
 
for (var i = 0; i < newFriends.length; i++) { 
 
    if (newFriends[i].length == 4) { 
 
    console.log(newFriends[i]); 
 
    } 
 
}

問題は、それはライアンとルーク、4つの文字で名前のすべての両方を返すべき時にコードが単に「ライアン」を返しています。

+1

「運」とは、長さが5です。これを試してください: 'var newFriends = friends。'/ var/sslit(/、\ s * /);フィルタ(f => f.length == 4)' – Titus

+0

'Kat'は、それは3プラススペースを持っています。そのログは 'Ryan'の下にあり、そこには先導的なスペースがあることが明確になっています。 –

+0

@Shirleyちょっと待ってましたが、あなたが答えを受け入れるとコミュニティはそれを感謝します:) – gyre

答えて

0

カンマの後にスペースがあるため、コードが機能しません。比較しながら、それらのスペースを無視するように単語をトリムするだけです。

var friends = "Ryan, Kat, Luke, Harry"; 
var newFriends = friends.split(","); 
for (var i = 0; i < newFriends.length; i++) { 
    if (newFriends[i].trim().length == 4) { 
    console.log(newFriends[i].trim()); 
    } 
2

stringあなたはカンマと単語の間に空白を含めているを分割しながら。 Array#mapString#trim関数を使用すると、不要な空白を削除して適切な結果を得ることができます。

var friends = "Ryan, Kat, Luke, Harry", 
 
    newFriends = friends.split(",").map(v => v.trim()); 
 

 
for (var i = 0; i < newFriends.length; i++) { 
 
    if (newFriends[i].length == 4) { 
 
    console.log(newFriends[i]); 
 
    } 
 
}

6

あなたはArray#filterArray#join方法の代わりに、forループ、ここで使用することができます。

また、splitトークンの内部に末尾のスペースを入れることを忘れないでください。そうでない場合は、lengthは実際に1文字以上記録されます。

var friends = "Ryan, Kat, Luke, Harry" 
 

 
var newFriends = friends.split(", ").filter(function (name) { 
 
    return name.length === 4 
 
}).join(", ") 
 

 
console.log(newFriends)

+0

'e.trim()'空白を削除すると、あなたの答えにバグがあります:) – Dummy

+2

@Dummy he ''、 ''で分割しています。彼は弦をトリムする必要はありません。 :) –

+1

@IvankaTodorova良いキャッチ、私の悪い:) – Dummy

0

どちらか、それはスペースをカンマで分割させる、friends.split(", ")

var friends = "Ryan, Kat, Luke, Harry"; 
var newFriends = friends.split(", "); 
for (var i = 0; i < newFriends.length; i++) { 
    if (newFriends[i].length == 4) { 
    console.log(newFriends[i]); 
    } 
} 

または分割後に両側に白いスペースをトリム、

var friends = "Ryan, Kat, Luke, Harry"; 
var newFriends = friends.split(","); 
for (var i = 0; i < newFriends.length; i++) { 
    if (newFriends[i].trim().length == 4) { 
    console.log(newFriends[i]); 
    } 
} 

またはマップ関数を使用してトリミングされた値の配列を返す、

var friends = "Ryan, Kat, Luke, Harry"; 
var newFriends = friends.split(",").map(function (val) { return val.trim(); }); 
for (var i = 0; i < newFriends.length; i++) { 
    if (newFriends[i].length == 4) { 
    console.log(newFriends[i]); 
    } 
} 
1

あなたがスペースまたはカンマではない任意の文字にマッチする正規表現を使用して、正規表現の4つの文字にそれを制限し、トリミングに名前を返すことができます配列は、そのようにあなたがあなたの間隔が問題を引き起こしている

0

var friends = "Ryan, Kat, Luke, Harry"; 
 
var newFriends = friends.match(/\b[^,\s]{4}\b/g); 
 

 
console.log(newFriends)
それぞれの名前などの間で持っているどのように多くのスペースは重要ではありません。代わりに、試してみてください:

var friends = "Ryan, Kat, Luke, Harry"; 
var newFriends = friends.split(", "); //And so on... 
0

空白の文字列で置き換えることができます。それは先頭にスペースがあるため

var friends = "Ryan, Kat, Luke, Harry"; var newFriends = friends.replace(/\s*/g, "").split(","); ....

関連する問題