Underscore.js对象对象映射器?

是否有一个Underscore.js函数可以根据另一个对象的属性将一个对象映射到另一个对象?

( AutoMapper如何在.NET中工作)

例如:

var objectA = { 'name': 'Jonathan', 'city': 'Sydney' }; var objectB = { 'name': 'Jonathan Conway', 'city': 'Sydney', 'errors': [] } _.mapperMethod(objectB); => { 'name': 'Jonathan Conway', 'city': 'Sydney' }; 

可能_.extend()

 _.extend(objectA, objectB); console.log(objectA); // { 'name': 'Jonathan Conway', 'city': 'Sydney', 'errors': [] } 

如果你不想拿起额外的键,你可以使用_.keys()_.pick()

 var keys = _.keys(objectA); _.extend(objectA, _.pick(objectB, keys)); console.log(objectA); // { 'name': 'Jonathan Conway', 'city': 'Sydney' } 
 Below is my auto mapper var sourceObj, desObj; var map: function (source, destination) { var desKeys = _.keys(destination), functions; _.extend(destination, _.pick(source, desKeys)); sourceObj = source; desObj = destination; functions = { forMember: function (sourceKey, desKey) { var keys = sourceKey.split('.'), sourceValue = sourceObj, index = 0; // incase sourceKey is a nested object like objectA.Value if (keys.length) { while (index < keys.length) { sourceValue = sourceValue[keys[index]]; index++; } desObj[desKey] = sourceValue; } else { desObj[desKey] = sourceObj[sourceKey]; } return functions; } }; return functions; } var mapList: function (listSource, listDestination) { _.each(listDestination, function(destination, i){ var source = listSource[i]; map(source,destination); }); functions = { forMember: function (sourceKey, desKey) { _.each(listDestination, function(destination, i){ var source = listSource[i]; map(source,destination) .forMember(sourceKey, desKey); }); return functions; } }; return functions; } and how to use it var source = { Name: 'Nguyen Tran', Age: '30', Address: { Street: '121 Le Van Viet', City: 'HCM' } }; var destination = { Name: 'test', age: '25', Street: '', City: '' }; autoMapper.map(source, destination) .forMember('Age', 'age') .forMember('Address.Street', 'Street') .forMember('Address.City', 'City') Hope this work for you. 

在过去的几个月中,我设法为TypeScript / JavaScript创build了一个非常完整的AutoMapper库端口:AutoMapperTS。 该端口在许多其他function中支持拼合/嵌套和asynchronous映射。

有关AutoMapperTS库的更多信息,包括如何使用NPM和Bower安装它,请查看GitHub上的库: http : //b.ldmn.nl/AutoMapperTS