用下划线循环键值对象

时间:2018-07-25 22:09:32

标签: javascript ecmascript-6 underscore.js

我有几个字符串数组,并给了一个特定的输入键字符串,我试图返回相应的键。

例如,如果输入值为“ a1”,则应返回“ aa”,因为“ a1”是键“ aa”的数组值的一部分。

 inputKey = 'a1';
 dict = {
    'aa': ['a1', 'a2'],
    'bb' : ['b1', 'b4', 'b6']
    ...
  };

  /
  // _.contains())

我当时正在考虑遍历字典中的每个元素,如果数组中存在该值,则返回键。

这是执行此操作的最佳方法吗? (为值数组找到相应的键)换句话说(将某些特定值映射到另一个值)。

2 个答案:

答案 0 :(得分:1)

使用.find().includes()应该足够简单:

let inputVal = 'a1';
let inputVal2 = 'b1';
let inputVal3 = 'c1';

let dict = {
  'aa': ['a1', 'a2'],
  'bb' : ['b1', 'b4', 'b6']
};

let foundKey = Object.keys(dict).find(key => dict[key].includes(inputVal));
let foundKey2 = Object.keys(dict).find(key => dict[key].includes(inputVal2));
let foundKey3 = Object.keys(dict).find(key => dict[key].includes(inputVal3));

console.log(foundKey);
console.log(foundKey2);
console.log(foundKey3);

答案 1 :(得分:1)

我知道您想要使用underscore的方法。

这是使用函数find和函数some的替代方法。

let inputKey = 'a1',
    dict = {      'aa': ['a1', 'a2'],      'bb': ['b1', 'b4', 'b6']    },
    result = Object.keys(dict).find(k => dict[k].some(d => d === inputKey));
    
console.log(result);

使用功能包含

let inputKey = 'a1',
    dict = {      'aa': ['a1', 'a2'],      'bb': ['b1', 'b4', 'b6']    },
    result = Object.keys(dict).find(k => dict[k].includes(inputKey));
    
console.log(result);