我有一种情况需要通过组合来自两个数组的信息来格式化一个对象。我已经完成了第一部分,但我不确定如何以我需要的格式生成最终对象。
首先,我有一系列文档更改,如下所示:
[ { 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
的内容中生成一个看起来像这样的对象?
最佳答案
您可以直接将属性添加到对象。
您可以采用 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);
关于javascript - 从两个数组的内容创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57012911/