You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lodash在Node.js中合并对象并去重部件字段

解决汉字数组合并与部件去重的方案

嘿,针对你提出的合并汉字数组、确保kanji唯一并移除part字段重复部件的需求,我整理了一套实用的JavaScript实现方案,步骤和代码如下:

核心思路

  1. 数组合并:把现有数组和目标数组合并到一起。
  2. 按汉字去重:用Map来跟踪每个唯一的kanji,避免重复条目。
  3. 部件去重:将每个汉字对应的part字段拆分为部件集合,用Set自动去重,最后再拼接回字符串格式。

代码实现

假设你有现有的汉字数组,以及需要合并的新数组,代码如下:

// 你的现有汉字数组
const existingKanji = [
  { "id": 3298, "kanji": "籲", "part": "一 | 亅 个 ハ 冂 口 目 冊 竹 貝 頁 龠 廾", "createdAt": "2018-04-16T02:27:33.993Z", "updatedAt": "2018-04-16T02:27:33.993Z" },
  { "id": 5801, "kanji": "龥", "part": "一 | 亅 个 ハ 冂 口 廾 目 冊 貝 頁 龠", "createdAt": "2018-04-16T02:27:34.102Z", "updatedAt": "2018-04-16T02:27:34.102Z" }
];

// 需要合并的、包含唯一kanji和part的数组
const newKanji = [
  { "id": 1234, "kanji": "籲", "part": "竹 貝 山", "createdAt": "2024-05-20T10:00:00.000Z", "updatedAt": "2024-05-20T10:00:00.000Z" },
  { "id": 5678, "kanji": "森", "part": "木 木 木", "createdAt": "2024-05-20T10:00:00.000Z", "updatedAt": "2024-05-20T10:00:00.000Z" }
];

// 合并并去重的核心函数
function mergeKanji(existing, newArr) {
  const kanjiMap = new Map();

  // 处理现有数组
  existing.forEach(item => {
    if (!kanjiMap.has(item.kanji)) {
      // 初始化部件集合,自动去重
      const parts = new Set(item.part.split(' '));
      kanjiMap.set(item.kanji, { ...item, part: parts });
    } else {
      // 合并部件,更新时间戳(取最新的更新时间)
      const current = kanjiMap.get(item.kanji);
      item.part.split(' ').forEach(p => current.part.add(p));
      if (new Date(item.updatedAt) > new Date(current.updatedAt)) {
        current.updatedAt = item.updatedAt;
      }
    }
  });

  // 处理新数组
  newArr.forEach(item => {
    if (!kanjiMap.has(item.kanji)) {
      const parts = new Set(item.part.split(' '));
      kanjiMap.set(item.kanji, { ...item, part: parts });
    } else {
      const current = kanjiMap.get(item.kanji);
      item.part.split(' ').forEach(p => current.part.add(p));
      if (new Date(item.updatedAt) > new Date(current.updatedAt)) {
        current.updatedAt = item.updatedAt;
      }
    }
  });

  // 将Set转换回空格分隔的字符串,整理为最终数组
  return Array.from(kanjiMap.values()).map(item => ({
    ...item,
    part: Array.from(item.part).join(' ')
  }));
}

// 执行函数得到结果
const finalResult = mergeKanji(existingKanji, newKanji);
console.log(finalResult);

效果说明

运行代码后,你会得到:

  • 唯一的kanji条目:不会出现重复的汉字记录。
  • 去重后的part字段:每个汉字的部件集合里没有重复项,比如籲的part会包含原有部件加上新增的“山”,且没有重复的“竹”“貝”;森的part会变成“木”(因为Set自动去重了重复的“木”)。
  • 时间戳合理更新:保留每个汉字最新的updatedAt时间,原始的createdAt不会被覆盖。

内容的提问来源于stack exchange,提问作者Hozoa glee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:08:51