首页 > web前端 > js教程 > 正文

如何使用共享键合并数组中的 JavaScript 对象?

Mary-Kate Olsen
发布: 2024-10-30 23:43:30
原创
909 人浏览过

How to Merge JavaScript Objects in an Array with Shared Keys?

使用共享键合并数组中的 JavaScript 对象

在 JavaScript 中,通常需要将具有相似键的对象组合成单个对象。考虑给出的示例:

<code class="js">const array = [
  {
    name: "foo1",
    value: "val1"
  },
  {
    name: "foo1",
    value: ["val2", "val3"]
  },
  {
    name: "foo2",
    value: "val4"
  }
];</code>
登录后复制

目标是将此数组重新组织为“输出”数组,其中所有值键都合并到具有共享名称的对象中。预期输出如下所示:

<code class="js">const output = [
  {
    name: "foo1",
    value: ["val1", "val2", "val3"]
  },
  {
    name: "foo2",
    value: ["val4"]
  }
];</code>
登录后复制

合并对象

解决此问题的一种方法是使用以下步骤:

  1. 使用 forEach() 迭代数组中的每个对象。
  2. 过滤输出数组以查找具有相同名称键的现有对象。
  3. 如果找到现有对象,则连接将当前对象的值添加到其值数组中。
  4. 如果未找到现有对象,则使用当前对象的属性创建一个新对象并将其添加到输出数组中。
  5. 处理这种可能性通过将值转换为数组来将值转换为字符串。

示例代码

以下代码实现了所描述的方法:

<code class="js">const array = [
  {
    name: "foo1",
    value: "val1"
  },
  {
    name: "foo1",
    value: ["val2", "val3"]
  },
  {
    name: "foo2",
    value: "val4"
  }
];

let output = [];

array.forEach(item => {
  const existing = output.filter(v => v.name == item.name);
  if (existing.length) {
    const existingIndex = output.indexOf(existing[0]);
    output[existingIndex].value = output[existingIndex].value.concat(item.value);
  } else {
    if (typeof item.value == 'string') item.value = [item.value];
    output.push(item);
  }
});

console.log(output);</code>
登录后复制

此代码将生成所需的输出数组,其中所有同名对象的值都会合并。

以上是如何使用共享键合并数组中的 JavaScript 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!