Javascript Immutable.js映射:从值中查找键

Javascript Immutable.js映射:从值中查找键,javascript,immutable.js,Javascript,Immutable.js,我创建了一个ImmutableJS映射,如下所示: const seatMap = Immutable.fromJS({ seatOne: 'Martin', seatTwo: 'Emelie', seatThree: 'Erik' }); 我想知道一个特定的人在坐哪个座位。可以假定这些值是唯一的 到目前为止,我提出了一个解决方案: const getSeatFromPerson = (seatMap, person) => { const [ ...keys ] = s

我创建了一个ImmutableJS映射,如下所示:

const seatMap = Immutable.fromJS({
  seatOne: 'Martin',
  seatTwo: 'Emelie',
  seatThree: 'Erik'
});
我想知道一个特定的人在坐哪个座位。可以假定这些值是唯一的

到目前为止,我提出了一个解决方案:

const getSeatFromPerson = (seatMap, person) => {
  const [ ...keys ] = seatMap.keys();

  for (let i = 0; i < keys.length; i++ {
    if (seatMap.get(keys[i]) === person) {
      return keys[i];
    }
  }

  return null;
};

console.log(getSeatFromPerson(seatMap, 'Martin')); // Should be "seatOne"
console.log(getSeatFromPerson(seatMap, 'Erik')); // Should be "seatThree"
console.log(getSeatFromPerson(seatMap, 'Christopher')); // Should be null
const getSeatFromPerson=(座位图,人)=>{
常量[…键]=seatMap.keys();
对于(设i=0;i

但是这个解决方案感觉很“笨重”,也不是很整洁或快速。有没有一个内置的方法或者更好的方法来实现它?

您可以使用这个单行函数,它使用:


就像在数据库中一样,你的“索引”应该基于你执行查找的方式。如果你想按名称查找,应该有一个单独的反向映射。我有时还需要找出坐在特定集合的人(基本上是
seatmap.get('seatOne')
)。你的意思是我应该用相同的内容创建一个不同的地图,仅仅是翻转的键和值吗?最终的座位数可能会接近100个,而坐在座位上的人不是静态的,人们可以切换座位。地图本身只需要复制属性名称和值,就像数据库中的索引一样e、 地图值也可以是保存在另一个集合中的对象的链接。(我的意思是,你确实要求“更好的方法”。)是的,我要求了。我只是不明白你的意思:)根据你想反向查找的频率和此地图更新的频率,你应该跟踪2个地图。成对更新两个贴图。
const getSeatFromPerson = (seatMap, person) => [...seatMap.keys()].find(seat => seatMap.get(seat) === person) || null;