我遇到一种情况,我需要通过组合来自两个数组的信息来格式化对象。我已经完成了第一部分,但是我不确定如何以所需的格式生成最终对象。
首先,我有一系列的文档更改,如下所示:
[ { kind: 'E', path: ['short_name'], lhs: 'testing', rhs: 'testing1' },
{ kind: 'E', path: ['long_name'], lhs: 'testing', rhs: 'testing2' } ]
然后我有一系列映射,如下所示:
[ { lhs: 'legacyId', rhs: 'id_number' },
{ lhs: 'name.short', rhs: 'short_name' },
{ lhs: 'name.long', rhs: 'long_name' } ]
现在,我将值与正确的属性名称匹配,如下所示:
let p;
let v;
let combinedArray = [];
for (let diff of differences) {
for (let mapping of mappings) {
if (diff.path[0] === mapping.rhs) {
p = diff.path[0];
v = diff.rhs;
combinedArray.push({ p, v });
}
}
}
这有效,并为我提供了combinedArray
:
[ { p: 'short_name', v: 'testing1' },
{ p: 'payer_name', v: 'testing2' } ]
现在,我需要从该数组生成的对象看起来应该像这样:
{
'short_name': 'testing1',
'long_name': 'testing1'
}
如何从combinedArray
的内容生成看起来像这样的对象?
答案 0 :(得分:1)
您可以将属性直接添加到对象中。
您可以使用set
并省略内部循环。
var differences = [{ kind: 'E', path: ['short_name'], lhs: 'testing', rhs: 'testing1' }, { kind: 'E', path: ['long_name'], lhs: 'testing', rhs: 'testing2' }]
mappings = [{ lhs: 'legacyId', rhs: 'id_number' }, { lhs: 'name.short', rhs: 'short_name' }, { lhs: 'name.long', rhs: 'long_name' }];
rhs = new Set(mappings.map(({ rhs }) => rhs)),
result = {};
for (let diff of differences) {
if (rhs.has(diff.path[0])) {
result[diff.path[0]] = diff.rhs;
}
}
console.log(result);