2017-06-07 22 views
0

オブジェクト内の値(国コード)から国ラベル(名前)を取得しようとしています。Javascriptのキーからオブジェクト値を取得しようとしています

Vue.jsでは、APIリクエストの国コードに基づいて国名を返す計算プロパティを構築しようとしています。テンプレートで

:国のリストから

countryLabel() { 
    var countries = require('../../plugins/countries') 
    var countryCode = this.content.country 
    function getLabelByValue(countries, countryCode) { 
     return Object.keys(countries).find(label => countries[value] === countryCode) 
    } 
} 

module.exports = [ 
    { value: 'AF', label: 'Afghanistan' }, 
    { value: 'AX', label: 'Aland Islands' }, 
    { value: 'AL', label: 'Albania' }, 
    { value: 'DZ', label: 'Algeria' }, 
    { value: 'AS', label: 'American Samoa' }, 
    { value: 'AD', label: 'Andorra' }, 
    { value: 'AO', label: 'Angola' }, 
    { value: 'AI', label: 'Anguilla' }, 
    { value: 'AQ', label: 'Antarctica' }, 
    { value: 'AG', label: 'Antigua and Barbuda' }, 
    ... 
] 
+0

だから、問題は何ですか? – abhishekkannojia

+0

何も返されません –

+1

さて、配列上のObject.keysは '0-> n'を返します。あなたが望むのは単純に 'countries.find(country => country.value === countryCode)'だと思います。 – mhodges

答えて

3

おそらく、アレイ上Object.keysを呼び出すことにしたくありません。このような

何かが何をしたい、おそらくもっとある:

function getLabelByValue(countries, countryCode) { 
    const entry = countries.find(item => item.value === countryCode); 
    return entry ? entry.label : null; 
} 

は問題がアレイ上Object.keysを呼び出すと、文字列に変換されている数字の配列を返すことです。

> console.log(Object.keys(['this', 'is', 'an', 'array'])); 
['0', '1', '2', '3'] 

exportsは既に配列なので、find()を直接呼び出すことができます。

+0

私はそれを包み込んだ関数を削除する必要がありましたが、うまくいきました。ありがとう。 –

2

これを実行するより良い方法は、オブジェクトを使用することです。これは、オブジェクトが辞書であるため、javascriptで何かを検索する最も速い方法です。したがって、エクスポートを { AF: 'Afghanistan', AX: 'Aland Islands', etc... } のように変更した場合は、countries[countryCode]を実行してインスタント検索を行うことができます。 rossipediaの答えに基づいて

+0

ありがとうございます。好奇心の中で、あなたはどのようにルックアップをしますか? –

+1

私のポストの最後の部分を参照してください。それは普通のオブジェクトなので、 'countries ['AF']のようなことをすると、そのキーの価値が得られます。 – frodo2975

+0

私はあなたが何を意味するかを見ます。ありがとう –

0

この私のために働いている:

countryLabel() { 
    const countries = require('../../plugins/countries') 
    return countries.find(item => item.value === this.content.country).label 
} 
+0

'this'コンテキストに注意してください。矢印機能を標準機能に変更する場合、このコードは破損します。 – mhodges

+2

私は、ありがとう。 –

関連する問題