2016-11-06 10 views
1

「N」で始まるリスト要素を新しいリストに並べ替えることを試みています。 これはなぜ機能しませんか?あなたが条件に基づいてフィルタリングしたいJavaScriptの文字で始まるリスト要素をフィルタリングする

const countries = ['Norway', 'Sweden', 'Denmark', 'New Zealand']; 

function firstN(){ 
    for (let i=0;i<countries.length;i++){ 
    countries[i].startsWith("N") 
    } 
} 

let startsWithN = countries.filter(firstN()) 
+1

コードには多くのエラーがあります。あなたの本当のコードを投稿してください。 2行目は意味をなさない。 – TheValyreanGroup

+0

@SanderBあなたは '' N '' ar 'startsWithN'で始まる要素だけを期待していますか? – guest271314

答えて

2

これは大体adeneoの答え、ほんの少しterser @と同じである:

const countries = ['Norway', 'Sweden', 'Denmark', 'New Zealand']; 

const startsWithN = countries.filter((country) => country.startsWith("N")); 

console.log(startsWithN); 

// Output: [ 'Norway', 'New Zealand' ] 
1

、という名前の関数は非常に単純で、その条件

const countries = ['Norway', 'Sweden', 'Denmark', 'New Zealand']; 
 

 
function firstN(item) { 
 
    return item.toLowerCase().indexOf('n') === 0; 
 
} 
 

 
let startsWithN = countries.filter(firstN); 
 

 
console.log(startsWithN)

+0

OPは入力配列をソートしようとしています。 – guest271314

+0

@ guest271314 - はい、私はそう思います。「新しいリストに並べ替えてください」という意味では、*はフィルターを意味しますか? – adeneo

+0

No. OPは入力配列のすべての要素が生成された配列、すなわち 'countries'に含まれることを期待しています。 arrayの最初のインデックスでは要素が '' N ''で始まります。 '.sort()'以外のオプションが 'const'のために使用できるかどうかは不明ですか? – guest271314

1

に基づいてtrueまたはfalseを返します。

const countries = ['Norway', 'Sweden', 'Denmark', 'New Zealand']; 
 

 
let startsWithN = countries.filter(function (country) { 
 
    return country[0].toLowerCase() === 'n'; 
 
}); 
 

 
console.log(startsWithN)

0
countries.filter(s => s.toLowerCase().indexOf("n") == 0) 
+0

で例を調整して、最初の文字で並べ替える '.sort()'の比較関数をまとめることができました「諸国」? – guest271314

+0

それはまったく影響しません。これにより、目的のリストが返されます。 – Mehdi

0

期待される結果は、次のことができ、"N"で始まるcountriesの要素のみを含む新しい配列の場合既存のjavascriptを調整してfirstNの範囲内の配列を作成し、入力配列をfirstN,.push()に渡します。ifの条件for新しい配列にループする、

const countries = ['Norway', 'Sweden', 'Denmark', 'New Zealand']; 
 

 
function firstN(arr, letter) { 
 
    for (let i = 0, res = []; i < arr.length; i++) { 
 
    if (arr[i].startsWith(letter)) res.push(arr[i]) 
 
    } 
 
    return res 
 
} 
 

 
let startsWithN = firstN(countries, "N"); 
 

 
console.log(startsWithN);

return新しい配列が、あなたは.sort()を使用することができ、代わりに元の配列をソートします。

const countries = ['Norway', 'Sweden', 'Denmark', 'New Zealand']; 
 

 
function sortByFirstLetter(letter) { 
 
    return function(a, b) { 
 
    let [firstLetterA, firstLetterB] = [a[0], b[0]]; 
 
    return firstLetterA === letter && firstLetterB !== letter ? -1 : 1 
 
    } 
 
} 
 

 
countries.sort(sortByFirstLetter("N")); 
 

 
console.log(countries);

+0

「compare」関数は、[JavaScriptの高度なソート](https://www.sitepoint.com/sophisticated-sorting-in-javascript/) – guest271314

0

さらにterser:これはRexExp.prototype.testのカリー化バージョンであるfilterに関数を渡す

const countries = ['Norway', 'Sweden', 'Denmark', 'New Zealand']; 
 

 
const startsWithN = countries.filter(/./.test.bind(/^N/)); 
 

 
console.log(startsWithN);

:それはコンテキストを有する(this)に設定つまり、大文字Nで始まる文字列に一致する正規表現です。結果は次のようになります。

const startsWithN = countries.filter(country => /^N/.test(country)); 
関連する問題