如何使用 Immutable.js 从 javascript 原始对象创建记录映射?
How to create a map of records from a javascript raw object with 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);
imagesMap
现在是一张包含其他地图的地图,每个地图一张。
我想创建一个包含记录的地图,例如使用定义为 Image
的记录:
var ImageRecord = Immutable.Record({ id: undefined, urls: undefined })
如何将 imagesMap
作为 ImageRecord
的地图?我可以将 reviver 传递给 fromJS
,还是应该采用 "old" 方法?
// old approach
var imagesMap = Immutable.Map()
for (key in images) {
imagesMap.set(key, new ImageRecord(images[key]))
}
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())
我是 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);
imagesMap
现在是一张包含其他地图的地图,每个地图一张。
我想创建一个包含记录的地图,例如使用定义为 Image
的记录:
var ImageRecord = Immutable.Record({ id: undefined, urls: undefined })
如何将 imagesMap
作为 ImageRecord
的地图?我可以将 reviver 传递给 fromJS
,还是应该采用 "old" 方法?
// old approach
var imagesMap = Immutable.Map()
for (key in images) {
imagesMap.set(key, new ImageRecord(images[key]))
}
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())