javascript - 如何将多个对象合并/组合成数组
问题描述
我正在寻找将对象合并到数组中的最佳方法..这是我的问题:
Object {
"payload": Array [
Object {
"category": "kontrakan",
},
Object {
"Tenant": "anji",
},
],
"type": "GET_DATA_VENUE_SUCCESS",
}
Object {
"payload": Array [
Object {
"category": "kost",
},
Object {
"Tenant": "ade",
},
],
"type": "GET_DATA_VENUE_SUCCESS",
}
期望像这样转换:
{
[
{"category" : "kontrakan","Tenant" : "anji"},
{"category" : "kost", "Tenant" : "ade"}
]
}
这里代码:
let obj = doc.data();
let arrObj = _.map(_.keys(obj), key => ({ [key]: obj[key] }));
console.log(arrObj);
我已经尝试过其他解决方案。object.assign/key, lodash : _.merge, union 仍然无法正常工作...
解决方案
您正在寻找的功能是reduce。
您可以使用 reduce 将“有效负载”数据组合到单个对象中。通过使用对象作为累加器。
例子:
const a = {
payload: [{
category: 'a'
},
{
tenant: 'a'
}]
};
function mergePayload(obj) {
return obj.payload.reduce((newObj, payloadObj) => {
// Create a new object with the properties of the old and the new combined
return Object.assign(newObj, payloadObj);
}, {});
}
// {category: "a", tenant: "a"}
console.log(mergePayload(a))
您可以将包含数据的数组映射到 reducer:
const data = [a, a];
// [{category: "a", tenant: "a"}, {category: "a", tenant: "a"}]
console.log(data.map((d) => mergePayload(d)));
编辑:您可以缩短减少时间,但这将不再为评论腾出空间。
function mergePayload(obj) {
return obj.payload.reduce((newObj, payloadObj) => Object.assign(newObj, payloadObj), {})
}
推荐阅读
- python - n维数据的高斯KDE:数组的前导次要不是正定的
- java - 线程“主”java.time.DateTimeException 中的异常:MonthOfYear 的值无效(有效值 1 - 12):当我使用 Google Map jar 时为 0
- javascript - ReactJS中如何处理两个setState方法一个接一个地执行?
- mysql - 条件在不同行和列中时的 CASE 语句
- c++ - 处理解码时改变的分辨率?
- c++ - 从 OpenCV 中的原始数据解析图像失败
- java - JUnit 测试用例中的空指针异常
- java - 我如何获取其位置属性的对象
- javascript - 在类组件中导入功能组件
- android - 如何从 Kotlin 中的服务器正确获取 XML