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