javascript - 从两个数组的内容创建对象

标签 javascript arrays object

我有一种情况需要通过组合来自两个数组的信息来格式化一个对象。我已经完成了第一部分,但我不确定如何以我需要的格式生成最终对象。

首先,我有一系列文档更改,如下所示:

   [ { 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/

相关文章:

ruby-on-rails - 在带有伤寒的 Rails 应用程序中将哈希数组作为参数传递给 POST 的问题

Javascript将数组过滤到新数组中

javascript - 带或不带引号的 JS 对象键?

object - 如何在使用对象的下拉菜单中显示所选元素的名称?

javascript - 有没有办法抓取网站并在每个页面上获取 JavaScript 变量?

javascript - 使用 angularjs 获取 html 之外的数据

c++ - 在 C 中的二维字符数组中查找字符串

javascript - AppleScript 变量传递给 JavaScript

javascript - 无法在 PHP 中捕获 POST 变量

java - toString 为特定类的每个对象返回相同的字符串?