2017-08-14 1 views
0

私は値の私の与えられたリストに基づいてキーを取得したい..私は探しています何をここ値のリストからキーを取得するにはどうすればよいですか?

、これは私のオブジェクトが

で、

my_obj = { 
    "A": "a_id", 
    "B": "b_id", 
    "C": "c_id", 
    "D": "d_id", 
    "E": "status", 
    "F": "start_time", 
    "G": "end_time", 
    "H": "count", 
    "I": "task_desc", 
    "J": "approved", 
    "K": "point", 
    "L": "complex", 
    "M": "c_date", 
    "N": "final_date" 
} 
my_val = ['c_date', 'final_date', 'my_due_date', 'start_date'] 

ので、上記my_val iから

0 ..すべてはリターンキーの代わりに値を除いて良い行ってきました... ["M", "N"]

は私が取得するために私のオブジェクトを逆にするinvertアンダースコアしようとした、取得したいです私が試したものをここに

、私のコードで何が間違っている

my_obj = { 
 
    "A": "a_id", 
 
    "B": "b_id", 
 
    "C": "c_id", 
 
    "D": "d_id", 
 
    "E": "status", 
 
    "F": "start_time", 
 
    "G": "end_time", 
 
    "H": "count", 
 
    "I": "task_desc", 
 
    "J": "approved", 
 
    "K": "point", 
 
    "L": "complex", 
 
    "M": "c_date", 
 
    "N": "final_date" 
 
} 
 
my_val = ['c_date', 'final_date', 'my_due_date', 'start_date'] 
 
out = _.filter(my_val, function(v) { return _.invert(my_obj)[v]}) 
 
console.log(out)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

_.invert(my_obj)[v] - this gives me a `key` but inside filter didnt.. 

?それを得る方法?

答えて

5

Object.keysを使用すると、キー配列を取得し、各キーの対応する値がmy_val配列に含まれているかどうかに基づいてフィルタリングできます。 Array.prototype.includes()する配列は、特定の要素を含むか否かを判断し、filterとうまく合ったブール値を返す:

ここ

my_obj = { 
 
    "A": "a_id", 
 
    "B": "b_id", 
 
    "C": "c_id", 
 
    "D": "d_id", 
 
    "E": "status", 
 
    "F": "start_time", 
 
    "G": "end_time", 
 
    "H": "count", 
 
    "I": "task_desc", 
 
    "J": "approved", 
 
    "K": "point", 
 
    "L": "complex", 
 
    "M": "c_date", 
 
    "N": "final_date" 
 
} 
 
my_val = ['c_date', 'final_date', 'my_due_date', 'start_date'] 
 

 
console.log(
 
    Object.keys(my_obj).filter(k => my_val.includes(my_obj[k])) 
 
)

+0

@Psidomあなたはそれを説明できますか?深い理解のために?おかげで素晴らしい答えがありがとう –

1

これあなただけのキーのサブセットをしたい場合

my_obj = { 
 
     "A": "a_id", 
 
     "B": "b_id", 
 
     "C": "c_id", 
 
     "D": "d_id", 
 
     "E": "status", 
 
     "F": "start_time", 
 
     "G": "end_time", 
 
     "H": "count", 
 
     "I": "task_desc", 
 
     "J": "approved", 
 
     "K": "point", 
 
     "L": "complex", 
 
     "M": "c_date", 
 
     "N": "final_date" 
 
    } 
 

 
my_val = ['c_date', 'final_date', 'my_due_date', 'start_date'] 
 

 
var output = []; 
 

 
for (var i = 0; i < my_val.length; i++) { 
 
    for (var key in my_obj) { 
 
    if (my_obj[key] === my_val[i]) { 
 
     output.push(key); 
 
    } 
 
    } 
 
} 
 

 
console.log(output);

1

のために働く必要があります。

let subset = Object.keys(my_obj).filter((key, _) => 
    my_val.includes(my_obj[key]) 
); 
1

my_obj = { 
 
    "A": "a_id", 
 
    "B": "b_id", 
 
    "C": "c_id", 
 
    "D": "d_id", 
 
    "E": "status", 
 
    "F": "start_time", 
 
    "G": "end_time", 
 
    "H": "count", 
 
    "I": "task_desc", 
 
    "J": "approved", 
 
    "K": "point", 
 
    "L": "complex", 
 
    "M": "c_date", 
 
    "N": "final_date" 
 
} 
 
let my_val = ['c_date', 'final_date', 'my_due_date', 'start_date'] 
 
let result = []; 
 

 
for (let key in my_obj) 
 
{ 
 
    for (let i = 0; i < my_val.length; i++) 
 
    { 
 
    if (my_obj[key] == my_val[i]) 
 
    { 
 
     result.push(key); 
 
    } 
 
    } 
 

 
} 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

0

あなたはfilter()を間違って使用しています。このメソッドでは、コールバック関数がブール値を返す必要がありますが、ここでは文字列を返します。各エントリの文字列(キー)をmy_valに戻す場合は、代わりにmap()を使用してください。

+0

iがアンダーフィルタを使用しないネイティブつ –

+0

ドキュメントが同一のhttpあります。 //underscorejs.org/#filter – gmferland

関連する問題