如何使用Immutable.js从javascript原始对象创建记录映射? [英] How to create a map of records from a javascript raw object with Immutable.js?

查看:113
本文介绍了如何使用Immutable.js从javascript原始对象创建记录映射?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是immutable.js的新手,我想更好地理解如何从原始JS对象开始使用记录。

I'm new to immutable.js and I'd like to understand better how to use records starting from a raw JS object.

使用 Immutable.fromJS()我可以创建一个传递原始对象的地图,例如:

With Immutable.fromJS() I can create a map passing a raw object, for example:

var images = {
   "1": {
    id: "1",
    urls: ["/medium/1.jpg", "/large/1.jpg"]
   },
   "2": {
    id: "2",
    urls: ["/medium/1.jpg", "/large/1.jpg"]
   }
  }

var imagesMap = Immutable.fromJS(images);

imagesMap 现在是包含其他地图的地图,每个图像一个。

imagesMap is now a map containing other maps, one for each image.

我想改为创建一个包含记录的地图,例如使用图像记录定义为:

I'd like instead to create a map containing records, for example using a Image record defined as:

var ImageRecord = Immutable.Record({ id: undefined, urls: undefined })

我如何将 imagesMap 作为<$ c $的地图C> ImageRecord S'我可以做的事情是将一个reviver传递给 fromJS ,还是应该采用旧方式?

How can I have imagesMap as map of ImageRecords? Is something I can do passing a reviver to fromJS, or should I go with the "old" approach?

// old approach
var imagesMap = Immutable.Map()
for (key in images) {
   imagesMap.set(key, new ImageRecord(images[key]))
}


推荐答案

< a href =http://facebook.github.io/immutable-js/docs/#/fromJS> Immutable.fromJS 有一个可选的第二个参数 reviver 你可以使用。您只需要确定要转换成记录的js对象的哪些部分。

Immutable.fromJS has an optional second parameter reviver that you can use. You just need to decide which parts of the js object you want to turn into records.

var images = {
   "1": {
    id: "1",
    urls: ["/medium/1.jpg", "/large/1.jpg"]
   },
   "2": {
    id: "2",
    urls: ["/medium/1.jpg", "/large/1.jpg"]
   }
  };

var ImageRecord = Immutable.Record({ id: "0", urls: [] })

var imagesMap = Immutable.fromJS(images, function(key, value) {
  // This check should be replaced by a better way to know that
  // we really want image records
  if(/^[0-9]+$/.test(key)) {
    return new ImageRecord(value)
  }
  return value
});

// Verify that it's really a record
console.log(imagesMap.get("2").toJS())
console.log(imagesMap.get("2").delete("urls").toJS())

http://jsbin.com/ronomibano/4/edit

这篇关于如何使用Immutable.js从javascript原始对象创建记录映射?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆