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
的值更新 obj1
的 lastName
和 age
的值。
是否有可用于此类映射的 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);
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>
基于 array
个键,有没有办法将一个 object
映射到另一个 object
?
var obj1 = { 'firstName': 'Tom', 'lastName': 'Hardy', 'age': 32 };
var obj2 = { 'firstName': 'Jon', 'lastName': 'Snow', 'age': 33 };
keys = ['lastName', 'age'];
我想用 obj2
的值更新 obj1
的 lastName
和 age
的值。
是否有可用于此类映射的 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);
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>