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

JavaScript:解决按预设数量分配国家数组至Zone的重复赋值问题

解决方案

核心问题是没有记录已分配的位置,每次都从数组开头截取。只需维护一个起始索引指针,每次分配后更新指针位置即可解决:

错误示例(问题代码)

const data = ["中国", "美国", "日本", "德国", "法国", "英国", "加拿大", "澳大利亚"];
const preset = [
  { zone: "ZoneA", count: 2 },
  { zone: "ZoneB", count: 3 },
  { zone: "ZoneC", count: 3 }
];

// 错误:每次从索引0开始截取,导致重复
const result = preset.map(item => ({
  zone: item.zone,
  countries: data.slice(0, item.count)
}));

修正后的代码

const data = ["中国", "美国", "日本", "德国", "法国", "英国", "加拿大", "澳大利亚"];
const preset = [
  { zone: "ZoneA", count: 2 },
  { zone: "ZoneB", count: 3 },
  { zone: "ZoneC", count: 3 }
];

let startIndex = 0; // 记录当前分配的起始位置
const result = preset.map(item => {
  // 从当前位置截取指定数量的国家
  const countries = data.slice(startIndex, startIndex + item.count);
  // 更新起始位置,为下一个zone准备
  startIndex += item.count;
  return {
    zone: item.zone,
    countries: countries
  };
});

console.log(result);

关键说明

  • 通过startIndex变量跟踪已分配到的位置,初始值为0。
  • 使用slice(startIndex, startIndex + item.count)截取连续的未分配元素,避免重复。
  • 若data总长度小于preset中count的总和,可改用slice(startIndex, Math.min(startIndex + item.count, data.length))防止截取到无效元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:53:12