将值和属性从一个对象合并到另一个对象
Merge values and properties from one object into another
我有两个独立的对象:
对象1
var obj1 = {
features: {
"1234": {
"price": 0
},
"1235": {
"price": 0
}
}
};
对象2
var obj2 = {
features: {
"1234": {
"price": 1000,
"property": "val"
},
"1235": {
"price": 500,
"property": "val"
}
}
};
我想将对象1的价格属性设置为目标2价格属性的值,其中键(1234、1235等)在两个对象中匹配。
此外,我想知道如何将新属性从对象2添加到Object 1。
最后,我希望对象3看起来像:
var obj3 = {
features: {
"1234": {
"price": 1000,
"property": "val"
},
"1235": {
"price": 500,
"property": "val"
}
}
};
我试过以下方法,但肯定有更好的方法吗?
var obj3 = {};
for (key in obj1) {
if (obj1.hasOwnProperty(key)) {
var val = obj1[key];
if (typeof val === 'object') {
for (obj1_key in val) {
if (val.hasOwnProperty(obj1_key)) {
if (obj1_key === 'price') {
// set value to value of obj2 price property
}
// add a new property to object #3
obj3[obj1_key]['property'] = 'value_of_object_2_property';
}
}
}
// add to new object #3
obj3[key] = val;
}
}
我知道有一些库可以帮助解决这类问题,比如下划线,所以如果你有关于如何使用下划线或lodash实现这一点的建议,我愿意接受任何建议。
你可以用lodash来完成。在这两种解决方案中,您都可以使用_.pluck
函数从obj2
中提取任何字段。
解决方案1,通过obj1
字段循环:
var obj3 = { features: {} };
_(obj1.features)
.keys()
.each(function(id) {
var price = ob2.prices[id];
if (price) {
obj3.features[id] = _.pick(price, ['price', 'property']);
}
})
.value();
解决方案2,使用reduce
功能:
var obj3 = _.reduce(ob1.feature, function(result, value, id) {
var price = ob2.prices[id];
if (price) {
result.features[id] = _.pick(price, ['price', 'property']);
}
return result;
}, { features: {}});
使用_.merge
这个方法类似于_.assign,只是它递归地将源对象的自己和继承的可枚举字符串键控属性合并到目标对象中。如果存在目标值,将跳过解析为未定义的源属性。数组和普通对象属性以递归方式合并。其他对象和值类型将被赋值覆盖。源对象是从左到右应用的。后续源将覆盖以前源的属性分配。
var obj1 = {
features: {
"1234": {
"price": 0
},
"1235": {
"price": 0
}
}
};
var obj2 = {
features: {
"1234": {
"price": 1000,
"property": "val"
},
"1235": {
"price": 500,
"property": "val"
}
}
};
var obj3 = {};
_.merge(obj3,obj1,obj2);
document.getElementById('result').innerHTML = JSON.stringify(obj3,null,2);
console.log(obj3);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.10.0/lodash.min.js"></script>
<pre id='result'></pre>
相关文章:
- 将javascript对象(属性+值)合并到一个对象中
- 如何使用ES6将两个具有函数的对象合并为一个新对象
- 将值和属性从一个对象合并到另一个对象
- 有没有一个lodash函数可以合并两个对象并删除其中一个对象的属性(如果它们没有)'不存在于另一个中
- 如何将两个json对象合并为一个json
- 将来自多个控制器的 AngularJS 范围对象合并到一个对象中
- 在 node.js 中将 2 个 json 对象合并为一个
- JavaScript - 将两个数组对象合并为一个arr对象,然后遍历每个索引/对象
- 将同一数组中的多个对象合并为一个对象
- Javascript合并一个对象和一个数组
- 如何将两个d3对象合并为一个进行批量操作
- 将一个对象合并到另一个对象的最佳方式(无覆盖)
- 循环遍历数组以查找具有匹配id的所有对象,并将这些对象合并到数组中的一个元素中
- 获取错误:试图合并一个对象,而不是得到[object object]
- 在Javascript中合并(或连接、组合?)一个对象的数组
- 如何将两个查询对象合并为一个查询对象
- 将两个对象合并为一个对象.我有这个数组
- Json.stringify()将多个对象合并为一个字符串
- 将JavaScript数组中的多个重复对象合并为一个
- 将多个对象合并为一个对象,使数组具有相同的属性值