根据array
个键,有没有办法将一个object
映射到另一个object
?
var obj1 = { 'firstName': 'Tom', 'lastName': 'Hardy', 'age': 32 };
var obj2 = { 'firstName': 'Jon', 'lastName': 'Snow', 'age': 33 };
keys = ['lastName', 'age'];
我想按lastName
的值更新age
的{{1}}和obj1
的值。
此类映射是否有obj2
函数可供使用?
答案 0 :(得分:4)
使用纯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>
答案 1 :(得分:3)
您可以使用lodash#assign
和lodash#pick
来实现此结果。
Application.GoTo r
_.assign(obj1, _.pick(obj2, keys));
&#13;
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);
&#13;
.as-console-wrapper{min-height:100%;top:0;}
&#13;
或者,这是使用lodash#pick
和lodash#defaults
的不可变解决方案:
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
var result = _(obj2).pick(keys).defaults(obj1);
&#13;
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);
&#13;
.as-console-wrapper{min-height:100%;top:0;}
&#13;