如何从值列表中获取密钥?

Moh*_*med 0 javascript list underscore.js

我想根据给定的值列表获取密钥..

在这里我要找的,

这是我的目标,

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']
Run Code Online (Sandbox Code Playgroud)

所以,从上面my_val我想得到,["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)
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
Run Code Online (Sandbox Code Playgroud)

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

我的代码有什么问题?怎么弄明白?

Psi*_*dom 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]))
)
Run Code Online (Sandbox Code Playgroud)