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

时间:2015-12-02 21:30:26

标签: javascript nested immutable.js

我有一个不可变的地图结构,它将一个presentationId映射到一个slideId到一个带有幻灯片属性的地图,其中有'打开',如下所示:

//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;
});

1 个答案:

答案 0 :(得分:0)

我认为更好的方法是使用.reduce,这是因为您无需在外部范围内使用变量,而在可读性方面会更好。相反,在这种情况下,find some会更好,因为您不需要将找到的对象解析为布尔值,就可以将其解析。

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