存在哪些JavaScript对象到对象映射库?

存在哪些JavaScript对象到对象映射库?,javascript,mapping,Javascript,Mapping,我目前正在从事一个大型JavaScript项目,我正在努力将输入的JSON数据(从后端)映射到我自己的JavaScript对象 我使用的是淘汰JavaScript MVVM框架,尽管它包含一个,但它不允许我实际重新映射属性。我想实现这一点,因为输入的JSON数据粒度太细,我想“展平”我的JS对象。下面是一个例子 输入数据 Object : { Description: { Id : 1, Title : 'ProductX' }, Pric

我目前正在从事一个大型JavaScript项目,我正在努力将输入的JSON数据(从后端)映射到我自己的JavaScript对象

我使用的是淘汰JavaScript MVVM框架,尽管它包含一个,但它不允许我实际重新映射属性。我想实现这一点,因为输入的JSON数据粒度太细,我想“展平”我的JS对象。下面是一个例子

输入数据

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%)。他们应该向你解释你需要什么

我希望这个图书馆能满足你的需要。如果您有任何问题和/或意见,请随时与我联系

  • 您可以使用,这是Javascript/JSON中对象映射的非常基本和简单的库。 使用此库时,需要在单独的文件中指定映射特性组合以及源和目标类型

  • 还有另一个库,这是稍微高级的。它可以根据属性名自动处理映射,但您仍然可以提到定制映射,因为定制映射并不直接。 如果您来自.net后台,则此库的实现方式与C#automapper相同

  • 谢谢不过我可以更干净。通过重新访问参数来调用递归函数看起来很难看。不过,现在没有时间去看如何能做得更好。我还创建了一个有利于TypeScript支持的应用程序。当您开始使用复杂映射或嵌套映射时,这可能会有所帮助。希望它能帮助那些希望处理这类任务的人