如何从值列表中获取键?
How can I get keys from list of values?
我想根据给定的值列表获取键..
这是我要找的,
这是我的对象,
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
我想得到,["M", "N"]
我尝试使用下划线 invert
来反转我的对象以获取...一切都很好,除了 return 键而不是值..
这是我尝试过的,
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..
我的代码有什么问题?如何得到它?
这应该适合你
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);
如果您只想要键的子集:
let subset = Object.keys(my_obj).filter((key, _) =>
my_val.includes(my_obj[key])
);
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>
您使用 filter()
不正确。该方法需要回调函数 return 一个布尔值,但这里你 return 一个字符串。如果你想为 my_val
中的每个条目 return 一个字符串(键),你应该使用 map()
代替。
可以用Object.keys
得到一个键数组,根据每个键对应的值是否包含在my_val
数组中进行过滤; Array.prototype.includes()
确定数组是否包含某个元素和returns一个布尔值,非常适合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]))
)
我想根据给定的值列表获取键..
这是我要找的,
这是我的对象,
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
我想得到,["M", "N"]
我尝试使用下划线 invert
来反转我的对象以获取...一切都很好,除了 return 键而不是值..
这是我尝试过的,
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..
我的代码有什么问题?如何得到它?
这应该适合你
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);
如果您只想要键的子集:
let subset = Object.keys(my_obj).filter((key, _) =>
my_val.includes(my_obj[key])
);
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>
您使用 filter()
不正确。该方法需要回调函数 return 一个布尔值,但这里你 return 一个字符串。如果你想为 my_val
中的每个条目 return 一个字符串(键),你应该使用 map()
代替。
可以用Object.keys
得到一个键数组,根据每个键对应的值是否包含在my_val
数组中进行过滤; Array.prototype.includes()
确定数组是否包含某个元素和returns一个布尔值,非常适合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]))
)