2017-07-15 6 views
-2

それを返す値をCONSOLE.LOGすることはできませんが、オブジェクトのnameプロパティ:Javascriptの機能は、私はオブジェクトの配列を持っている

function getName1(id) { 
    array.map((object) => { 
    if(object["id"] === id) 
     return object["name"] 
    }) 
} 

しかし、このコード

console.log(getName1(0)) // undefined 

戻り未定義

私は単にそれが完全に正常に動作し、関数の内部

function getName2(id) { 
    array.map((object) => { 
    if(object["id"] === id) 
     console.log(object["name"]) 
    }) 
} 

のオブジェクトの名前をCONSOLE.LOG場合:

getName2(0) // "Name1" 

私は基本的にはちょうど

getName1(0) 

をしたいの復帰に

Name0 

どうすればこの問題を解決できますか?

+0

適切なタグだけを使用してください。これは[tag:asynchronous]や[tag:undefined]とは関係がありませんし、[tag:return]とはまったく関係がありません。 –

+0

関数getName1は何も返しません。 returnステートメントは、getName1関数ではなくマップにあります。マッチを探して配列を反復し、その値を返す必要があります。私はマップがあなたがここで欲しいものだとは思わない。 reduceをチェックするか、配列を反復するだけです – terpinmd

答えて

1

returnの文が、getName1ではなく、mapコールバックから返されています。

mapをまったく使用しないでください。その仕事は、コールバックの戻り値に基づいて新しい配列を作成することです。代わり

、ジョブ所与のコールバック関数がtruthy値を返す配列の最初のエントリを検索し、次にあれば見つかったエントリのnameプロパティを返すことであるArray#find、使用:

function getName1(id) { 
    const entry = array.find(object => object.id === id); 
    return entry && entry.name; 
} 

をまたはES5およびそれ以前に(私はあなたが矢印の機能を使用+上記のため、ES2015を使用):entryがtruthyある場合

function getName1(id) { 
    var entry = array.find(function(object) { return object.id === id; }); 
    return entry && entry.name; 
} 

entry && entry.name部分が意味を」、entry.nameを返し、そうでない場合は、 entry(偽値)を返します。この場合、エントリが見つからなかった場合はnull(エントリが見つからない場合はArray#findが返されるため)または見つかったエントリのnameが返されます。

+0

ありがとうございます!私はマップを使用していることを完全に「忘れている」ことがあります。時々あなたは私が推測するいくつかの時間の後で盲目になります:) 私が正しく理解すれば、私が欲しかったものを得る "古い学校"の方法は、 array( 'for(let i = 0; i Skilla123

+0

@ Skilla123:はい、それは確かに別の方法です。 –

関連する問題