gpb*_*pbl 9 javascript immutability reviver-function immutable.js
我是immutable.js的新手,我想更好地理解如何从原始JS对象开始使用记录.
随着Immutable.fromJS()我可以创建一个地图将原料对象,例如:
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);
Run Code Online (Sandbox Code Playgroud)
imagesMap 现在是一个包含其他地图的地图,每个地图一个.
我想改为创建一个包含记录的地图,例如使用Image定义为的记录:
var ImageRecord = Immutable.Record({ id: undefined, urls: undefined })
Run Code Online (Sandbox Code Playgroud)
我怎么能有s的imagesMap地图ImageRecord?我可以做些什么来通过复兴fromJS,或者我应该采用"旧"方法?
// old approach
var imagesMap = Immutable.Map()
for (key in images) {
imagesMap.set(key, new ImageRecord(images[key]))
}
Run Code Online (Sandbox Code Playgroud)
Oll*_*liM 17
Immutable.fromJS有一个可选的第二个参数reviver,你可以使用它.您只需要确定要转换为记录的js对象的哪些部分.
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())
Run Code Online (Sandbox Code Playgroud)
http://jsbin.com/ronomibano/4/edit