存在哪些JavaScript对象到对象映射库?
我目前正在从事一个大型JavaScript项目,我正在努力将输入的JSON数据(从后端)映射到我自己的JavaScript对象 我使用的是淘汰JavaScript MVVM框架,尽管它包含一个,但它不允许我实际重新映射属性。我想实现这一点,因为输入的JSON数据粒度太细,我想“展平”我的JS对象。下面是一个例子 输入数据存在哪些JavaScript对象到对象映射库?,javascript,mapping,Javascript,Mapping,我目前正在从事一个大型JavaScript项目,我正在努力将输入的JSON数据(从后端)映射到我自己的JavaScript对象 我使用的是淘汰JavaScript MVVM框架,尽管它包含一个,但它不允许我实际重新映射属性。我想实现这一点,因为输入的JSON数据粒度太细,我想“展平”我的JS对象。下面是一个例子 输入数据 Object : { Description: { Id : 1, Title : 'ProductX' }, Pric
Object : {
Description: {
Id : 1,
Title : 'ProductX'
},
Price : {
Last : 12,
Currency : 3
}
}
我想将其重新映射/展平到:
var mappedObject = {
id : 1,
title: 'ProductX',
price : 12,
currency : 3
}
因此,我想提供一个映射配置,详细说明哪些输入属性应该映射到哪些输出属性。很像正在配置的
我的问题是:是否有任何库能够实现我想要实现的目标,或者这需要我建立自己的库?嗯,我不认为有任何库可以实现这一点,因为这听起来很容易 以下是一个例子:
var obj = {
Description: {
Id : 1,
Title : 'ProductX'
},
Price : {
Last : 12,
Currency : 3
}
},
mappedObject = {};
function mapThat( obj, mappedObject ) {
Object.keys( obj ).forEach( function( key ) {
if ( typeof obj[ key ] === 'object' ) {
// If it's an object, let's go recursive
mapThat( obj[ key ], mappedObject );
}
else {
// If it's not, add a key/value
mappedObject[ key.toLowerCase() ] = obj[ key ];
}
} );
}
mapThat( obj, mappedObject );
console.log( mappedObject );
此处演示:实际上,knockoutjs映射插件允许您这样做: 在
ko.mapping.fromJS
调用中,您可以提供一个映射对象,该对象将用于映射包含的属性
var mapper = {
create: function(options){
return { name: ko.observable(options.data.name) };
}
};
这意味着使用这个映射器和映射插件,每个对象都将被展平为一个只包含其名称作为可观察对象的对象
您可以这样使用它:
var viewModel = ko.mapping.fromJS({id: 1, name: "a", desc: "b"}, mapper);
在这种情况下,viewModel
将只有一个属性名
您可以在官方文档中阅读有关此功能的更多信息。此主题上次更新已有一段时间了。由于人们现在可能仍在搜索对象到对象的映射器: 去年,我创建了一个C#AutoMapper实现的端口,以便为这个场景输入脚本/JavaScript。我已将代码放在GitHub()。您也可以使用automapper ts NPM或Bower软件包直接使用该库 图书馆几乎有完整的文档记录。此外,已经有相当多的Jasmine单元测试可用(代码覆盖率约为95%)。他们应该向你解释你需要什么 我希望这个图书馆能满足你的需要。如果您有任何问题和/或意见,请随时与我联系
谢谢不过我可以更干净。通过重新访问参数来调用递归函数看起来很难看。不过,现在没有时间去看如何能做得更好。我还创建了一个有利于TypeScript支持的应用程序。当您开始使用复杂映射或嵌套映射时,这可能会有所帮助。希望它能帮助那些希望处理这类任务的人