Eng*_*ion 18 javascript dictionary
我有一个像这样的js Map
let people = new Map();
people.set('1', 'jhon');
people.set('2', 'jasmein');
people.set('3', 'abdo');
Run Code Online (Sandbox Code Playgroud)
我想要的是一些通过其值返回键的方法
let jhonKey = people.getKey('jhon'); // jhonKey should be '1'
Run Code Online (Sandbox Code Playgroud)
Nin*_*olz 23
你可以在一系列条目中搜索它.
let people = new Map();
people.set('1', 'jhon');
people.set('2', 'jasmein');
people.set('3', 'abdo');
let jhonKeys = [...people.entries()]
.filter(({ 1: v }) => v === 'jhon')
.map(([k]) => k);
console.log(jhonKeys); // if empty, no key foudn otherwise all found keys.Run Code Online (Sandbox Code Playgroud)
Raj*_*esh 17
您可以使用for..of循环直接遍历map.entries并获取密钥.
function getByValue(map, searchValue) {
for (let [key, value] of map.entries()) {
if (value === searchValue)
return key;
}
}
let people = new Map();
people.set('1', 'jhon');
people.set('2', 'jasmein');
people.set('3', 'abdo');
console.log(getByValue(people, 'jhon'))
console.log(getByValue(people, 'abdo'))Run Code Online (Sandbox Code Playgroud)
Nit*_*ang 10
尽管已经存在迟到和其他很好的答案,但您仍然可以尝试以下“...”和“Array.find”:
let people = new Map();
people.set('1', 'jhon');
people.set('2', 'jasmein');
people.set('3', 'abdo');
function getKey(value) {
return [...people].find(([key, val]) => val == value)[0]
}
console.log('Jasmein - ', getKey('jasmein'))
console.log('Jhon - ', getKey('jhon'))Run Code Online (Sandbox Code Playgroud)
没有直接的方法可以在这个方向上选择信息,所以如果您拥有的只是地图,则需要按照其他人的建议循环设置.
如果map/array/other足够大以至于这样的循环会出现性能问题并且在项目中需要反向查找,那么你可以使用一对map/arrays/other实现自己的结构.每个当前对象和另一个键和值反转.这样反向查找与普通查找一样有效.当然,您需要做更多的工作,因为您需要实现作为一个或两个底层对象的传递所需的每个方法,因此如果地图很小和/或不需要反向查找-via-loop选项可能更好,因为维护更简单,并且JiT编译器可能更容易优化.
在任何情况下,要注意的一件事是多个键可能具有相同值的可能性.如果这是可能的,那么在循环遍历地图时,你需要决定是否可以任意返回一个可能的键(可能是第一个),或者如果你想返回一个键数组,并且实现一个反向索引对于可能具有重复值的数据,也需要考虑相同的问题.
鉴于 JavaScript 地图,我喜欢Nitish 的回答:
const map = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three'],
]);
function getKey(val) {
return [...map].find(([key, value]) => val === value)[0];
}
console.log(getKey('one')); // 1
console.log(getKey('two')); // 2
console.log(getKey('three')); // 3Run Code Online (Sandbox Code Playgroud)
对于 JavaScript 对象,您可以执行以下操作:
const map = {
1: 'one',
2: 'two',
3: 'three',
};
function getKey(val) {
return Object.keys(map).find(key => map[key] === val);
}
console.log(getKey('one')); // 1
console.log(getKey('two')); // 2
console.log(getKey('three')); // 3Run Code Online (Sandbox Code Playgroud)