javascript 中的对象-对象映射

Object-Object Mapping in javascript

基于 array 个键,有没有办法将一个 object 映射到另一个 object

var obj1 = { 'firstName': 'Tom', 'lastName': 'Hardy', 'age': 32 };
var obj2 = { 'firstName': 'Jon', 'lastName': 'Snow', 'age': 33 };
keys = ['lastName', 'age'];

我想用 obj2 的值更新 obj1lastNameage 的值。

是否有可用于此类映射的 lodash 函数?

对于纯 Javascript,您可以使用 Array#forEach 函数来遍历键并使用 [] 符号来访问基于其他变量值的属性。

var obj1 = { 'firstName': 'Tom', 'lastName': 'Hardy', 'age': 32 };
var obj2 = { 'firstName': 'Jon', 'lastName': 'Snow', 'age': 33 };
var keys = ['lastName', 'age'];

keys.forEach(prop => obj1[prop] = obj2[prop]);

console.log(obj1);

lodash#forEach

var obj1 = { 'firstName': 'Tom', 'lastName': 'Hardy', 'age': 32 };
var obj2 = { 'firstName': 'Jon', 'lastName': 'Snow', 'age': 33 };
var keys = ['lastName', 'age'];

_.forEach(keys, prop => obj1[prop] = obj2[prop]);

console.log(obj1);
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js'></script>

您可以使用 lodash#assign and lodash#pick 来实现此结果。

_.assign(obj1, _.pick(obj2, keys));

var obj1 = { 'firstName': 'Tom', 'lastName': 'Hardy', 'age': 32 };
var obj2 = { 'firstName': 'Jon', 'lastName': 'Snow', 'age': 33 };
var keys = ['lastName', 'age'];

_.assign(obj1, _.pick(obj2, keys));

console.log(obj1);
.as-console-wrapper{min-height:100%;top:0;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

或者,这是一个使用 lodash#pick and lodash#defaults 的不可变解决方案:

var result = _(obj2).pick(keys).defaults(obj1);

var obj1 = { 'firstName': 'Tom', 'lastName': 'Hardy', 'age': 32 };
var obj2 = { 'firstName': 'Jon', 'lastName': 'Snow', 'age': 33 };
var keys = ['lastName', 'age'];

var result = _(obj2).pick(keys).defaults(obj1);

console.log(result);
.as-console-wrapper{min-height:100%;top:0;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>