在Immutable.js映射中查找嵌套对象的最佳方法

best way to find nested object in Immutable.js Map

本文关键字:对象 最佳 方法 嵌套 查找 Immutable js 映射      更新时间:2023-09-26

我有一个不可变映射结构,它将presentationId映射到幻灯片Id映射到具有幻灯片属性的映射,其中"打开",如下所示:

//maps a chapterId to a pageId
var map = Map(fromJS({
    123: {
        22: {
            slideId: 22,
            presentationId: 123,
            opened: 1
        }
          23: {
            slideId: 23,
            presentationId: 123,
            opened: 0
        }
    }
}));

抓住/找到已打开====1的幻灯片的最佳方法是什么?

我有这个,它很有效,但我认为一定有一个更好的方法,用更少的代码行?

var openSlide;
map.some((slideMap, presentationId) => {
    openSlide = slideMap.find(slide => {
        return parseInt(slide.get('opened')) === 1;
    });
    return openSlide ? true : false;
});

我认为更好的方法是使用.reduce,因为你不需要有范围外的变量——如果涉及到可读性,那就更好了。相反,find在这种情况下some会更好,因为您不需要将找到的对象解析为布尔值,它已经被解析了。

const openSlide = map.reduce((acc, slideMap) => {
  return acc || slideMap.some(slide => {
    return parseInt(slide.get('opened')) === 1
  })
}, false)