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

如何将两个含公共pin键的对象数组合并,按规则填充customer子数组

解决数组合并并按规则分配元素的问题

我明白你的需求了——要把Array2里的对象按规则分配到Array1每个对象的customer数组中,最终新数组长度和Array1一致,前几个元素各分配指定数量,最后一个收剩下的所有,还要避免重复数据。之前你手动push出现重复,应该是没正确处理已分配元素的移除,我给你一个清晰的实现方案:

实现思路

  1. 先计算每个前置元素需要分配的数量:Math.round(Array2.length / Array1.length),这里10/4取整后是2。
  2. 复制一份Array2的副本,避免修改原数组,同时用来跟踪剩余未分配的元素。
  3. 遍历Array1,对每个元素(除最后一个)从剩余副本中取出对应数量的元素,最后一个元素直接取剩余所有元素。
  4. 操作时注意创建原对象的副本,避免修改原Array1的结构。

代码实现

// 你的输入数组
const Array1 = [ { "id": 1, "email": "pwitterick0@uol.com.br", "pin": 600090, "customer": [] }, { "id": 2, "email": "ssivorn1@pagesperso-orange.fr", "pin": 600090, "customer": [] }, { "id": 3, "email": "nlawford2@usatoday.com", "pin": 600090, "customer": [] }, { "id": 4, "email": "rclipsham3@vistaprint.com", "pin": 600090, "customer": []} ];
const Array2 = [ { "id": 1, "first_name": "Amble", "last_name": "Huntly", "email": "ahuntly0@symantec.com", "gender": "Male", "addr": "30 Badeau Circle", "pin": 600090 }, { "id": 2, "first_name": "Karlene", "last_name": "Forrest", "email": "kforrest1@rediff.com", "gender": "Female", "addr": "9417 Sutherland Avenue", "pin": 600090 }, { "id": 3, "first_name": "Mel", "last_name": "Kayley", "email": "mkayley2@xinhuanet.com", "gender": "Female", "addr": "7 Sage Crossing", "pin": 600090 }, { "id": 4, "first_name": "Nissa", "last_name": "Abelov", "email": "nabelov3@macromedia.com", "gender": "Female", "addr": "2906 Fairfield Circle", "pin": 600090 }, { "id": 5, "first_name": "Benn", "last_name": "Calbrathe", "email": "bcalbrathe4@amazon.de", "gender": "Bigender", "addr": "2914 Steensland Avenue", "pin": 600090 }, { "id": 6, "first_name": "Hobard", "last_name": "Toffanini", "email": "htoffanini5@simplemachines.org", "gender": "Genderfluid", "addr": "33695 Luster Street", "pin": 600090 }, { "id": 7, "first_name": "Jabez", "last_name": "Arlidge", "email": "jarlidge6@spotify.com", "gender": "Male", "addr": "1827 Harper Parkway", "pin": 600090 }, { "id": 8, "first_name": "Mitchel", "last_name": "Jessard", "email": "mjessard7@ask.com", "gender": "Male", "addr": "52 Fieldstone Pass", "pin": 600090 }, { "id": 9, "first_name": "Robbyn", "last_name": "Kenningley", "email": "rkenningley8@imdb.com", "gender": "Female", "addr": "44447 Golf Course Terrace", "pin": 600090 }, { "id": 10, "first_name": "Jaynell", "last_name": "todor", "email": "jtodor9@hexun.com", "gender": "Female", "addr": "3 Shoshone Junction", "pin": 600090 } ];

// 计算每个前置元素分配的数量
const perItemCount = Math.round(Array2.length / Array1.length);
// 创建Array2的副本,避免修改原数组,同时跟踪剩余元素
let remainingCustomers = [...Array2];

// 生成合并后的数组
const mergedArray = Array1.map((item, index) => {
  // 复制原对象,防止修改原Array1的元素
  const newItem = { ...item };
  if (index !== Array1.length - 1) {
    // 前n-1个元素:从剩余数组中取出指定数量的元素
    newItem.customer = remainingCustomers.splice(0, perItemCount);
  } else {
    // 最后一个元素:取剩余所有元素
    newItem.customer = remainingCustomers;
  }
  return newItem;
});

console.log(mergedArray);

代码说明

  • 避免原数组修改:用[...Array2]创建副本,{...item}复制Array1的每个对象,这样操作不会影响原始输入数据。
  • 无重复分配:splice(0, perItemCount)会从remainingCustomers中移除并返回指定数量的元素,所以已经分配的元素不会再被重复使用。
  • 适配规则:自动处理最后一个元素的剩余分配,不管Array2的长度是多少,都能保证所有元素被分配完毕。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:42:32