如何遍历嵌套数组元素并拼接,生成随机组合名称?
解决方案
先明确你要实现的核心:从node1.g取元素作为前缀,和其他节点的数组元素做两种组合——前缀+单个元素、前缀+node3元素+对应位置的node5元素,最终生成可随机排序的名称组合。下面是具体实现:
1. 提取目标数组
先把需要参与组合的数组提取出来,简化后续操作:
const names = { node1: { g: ['ro', 'cf', 'de'], h: ['no', 'ei','ie', 'ak'], }, node3: { k: ['di', 'eik', 'dn'], f: ['ei', 'ci', 'ao'], }, node5: { a: ['dc','eg', 'io'], b: ['ei', 'ik', 'cf'], } }; // 前缀数组(node1.g) const prefixes = names.node1.g; // node3下所有元素合并 const node3Items = [...names.node3.k, ...names.node3.f]; // node5下所有元素合并 const node5Items = [...names.node5.a, ...names.node5.b]; // node3与node5对应位置的元素对(用于三者组合) const pairedItems = [ ...names.node3.k.map((item, idx) => [item, names.node5.a[idx]]), ...names.node3.f.map((item, idx) => [item, names.node5.b[idx]]) ];
2. 生成组合结果
遍历前缀数组,生成两种组合并收集结果:
const finalResults = []; prefixes.forEach(prefix => { // 第一部分:前缀 + 单个node3/node5元素 node3Items.forEach(item => finalResults.push(`${prefix} ${item}`)); node5Items.forEach(item => finalResults.push(`${prefix} ${item}`)); // 第二部分:前缀 + node3元素 + 对应node5元素 pairedItems.forEach(([n3Item, n5Item]) => { finalResults.push(`${prefix} ${n3Item} ${n5Item}`); }); });
3. 随机排序(满足随机名称需求)
如果需要随机输出名称,用洗牌算法打乱结果数组:
// Fisher-Yates 洗牌算法 function shuffle(arr) { for (let i = arr.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [arr[i], arr[j]] = [arr[j], arr[i]]; } return arr; } // 输出打乱后的结果 console.log(shuffle(finalResults).join('\n'));
输出示例(以ro为前缀)
运行后会得到你期望的格式:
ro di ro eik ro dn ro ei ro ci ro ao ro dc ro eg ro io ro ei ro ik ro cf ro di dc ro eik eg ro dn io ro ei ei ro ci ik ro ao cf
内容的提问来源于stack exchange,提问作者Por
相关产品推荐
相关产品推荐

