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

如何编写函数合并不同数组元素?数组配对与整合需求求助

数组处理问题

现有三个数组:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:17:01