如何编写函数合并不同数组元素?数组配对与整合需求求助
数组处理问题
现有三个数组:
const names = ["Robert", "Mark", "Lindsay", "Anna", "Erin", "Andrew"] const surnames = ["Smith", "Black", "White", "Lewis", "Cooper", "Hill"] const ages = [21, 14, 19, 28, 65, 31]
需要实现两个函数:
- 生成包含随机男女配对的新数组(示例:
["Robert-Anna", "Erin-Mark", ...]) - 生成整合姓名、姓氏与年龄的新数组(示例:
["Robert Smith 21", "Mark Black 14", ...])
现有尝试
第一个函数仅能生成一组配对,未封装成完整函数:
function getElementFromArray(arr) { const min = 0; const max = (arr.length); const randIndex = Math.floor(Math.random() * (max - min)); return arr[randIndex]; } const boyArray = Array("Robert", "Mark", "Andrew"); const boy = getElementFromArray(boyArray); const girlArray = Array("Erin", "Anna", "Lindsay"); const girl = getElementFromArray(girlArray); const getPair = [boy + girl];
第二个函数写法冗长,未封装:
const nameSurnameAge = [names.slice (0, 1) + surnames.slice (0, 1) + ages.slice (0, 1)] + [names.slice (1, 2) + surnames.slice (1, 2) + ages.slice (1, 2)]
解决方案
1. 随机男女配对函数
方案一:生成不重复的全配对
如果需要让所有男生都和不同女生配对一次,可通过打乱女生数组后一一对应:
function generateRandomPairs() { const boys = ["Robert", "Mark", "Andrew"]; const girls = ["Erin", "Anna", "Lindsay"]; // 复制并打乱女生数组,避免修改原数据 const shuffledGirls = [...girls].sort(() => Math.random() - 0.5); // 配对生成结果 return boys.map((boy, idx) => `${boy}-${shuffledGirls[idx]}`); } // 调用示例 console.log(generateRandomPairs()); // 输出示例:["Robert-Lindsay", "Mark-Anna", "Andrew-Erin"]
方案二:生成指定数量的可重复配对
如果允许重复配对,可生成任意数量的随机组合:
function generateRandomPairs(count = 3) { const boys = ["Robert", "Mark", "Andrew"]; const girls = ["Erin", "Anna", "Lindsay"]; // 抽取随机元素的工具函数 const pickRandom = arr => arr[Math.floor(Math.random() * arr.length)]; const pairs = []; for (let i = 0; i < count; i++) { pairs.push(`${pickRandom(boys)}-${pickRandom(girls)}`); } return pairs; } // 调用示例:生成5组配对 console.log(generateRandomPairs(5));
2. 整合姓名、姓氏与年龄的函数
利用数组map方法,通过索引关联三个数组的对应元素,简洁高效:
function generatePersonInfo() { const names = ["Robert", "Mark", "Lindsay", "Anna", "Erin", "Andrew"]; const surnames = ["Smith", "Black", "White", "Lewis", "Cooper", "Hill"]; const ages = [21, 14, 19, 28, 65, 31]; // 校验数组长度一致性,避免索引越界 if (names.length !== surnames.length || names.length !== ages.length) { throw new Error("三个数组的长度必须一致"); } return names.map((name, idx) => `${name} ${surnames[idx]} ${ages[idx]}`); } // 调用示例 console.log(generatePersonInfo()); // 输出:["Robert Smith 21", "Mark Black 14", "Lindsay White 19", "Anna Lewis 28", "Erin Cooper 65", "Andrew Hill 31"]
内容的提问来源于stack exchange,提问作者leopolis
相关产品推荐
相关产品推荐

