javascript中的对象 - 对象映射

时间:2017-10-07 05:10:55

标签: javascript underscore.js lodash

根据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函数可供使用?

2 个答案:

答案 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);

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>

答案 1 :(得分:3)

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

Application.GoTo r

&#13;
&#13;
_.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;
&#13;
&#13;

或者,这是使用lodash#picklodash#defaults的不可变解决方案:

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

&#13;
&#13;
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;
&#13;
&#13;