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
相关产品推荐
相关产品推荐

