JavaScript如何提取多维数组中重复的最高投标值至独立数组?
解决JavaScript竞标系统重复最高出价的问题
嘿,作为编程新手遇到这种问题完全不用慌,咱们一步步来拆解解决:
步骤1:找出最高出价金额
首先得确定所有出价里的最高值,我们可以用数组的map方法提取所有出价金额,再用Math.max()拿到最大值:
const highestBid = Math.max(...bidarray.map(bid => bid[1]));
bidarray.map(bid => bid[1]):把原始数组里每个子数组的第二个元素(也就是出价数)提取出来,得到一个纯金额的数组[55,55,20,30,55,10]...是扩展运算符,把这个金额数组拆成单个参数传给Math.max(),这样就能算出最高出价55了
步骤2:提取所有最高出价的项
接下来用filter方法筛选出所有出价等于最高值的子数组,这就是你要的duparray:
const duparray = bidarray.filter(bid => bid[1] === highestBid);
filter会遍历原始数组,只保留符合bid[1] === highestBid条件的元素,最终得到[ ['Sarah', 55], ['John', 55], ['George', 55] ]
步骤3:随机选出赢家
最后从duparray里随机挑一个元素就行,用Math.random()生成随机索引:
const randomIndex = Math.floor(Math.random() * duparray.length); const winner = duparray[randomIndex];
Math.random()生成0到1之间的随机小数,乘以数组长度(这里是3)得到0到3之间的数Math.floor()把这个数向下取整,得到0、1、2中的一个合法索引,再用这个索引从duparray里取出赢家
完整代码示例
把所有步骤整合起来,加上注释,方便你理解:
// 原始出价数组 const bidarray = [ ['Sarah', 55], ['John', 55], ['Joe', 20], ['David', 30], ['George', 55], ['Yogi', 10] ]; // 1. 获取最高出价 const highestBid = Math.max(...bidarray.map(bid => bid[1])); // 2. 提取所有最高出价的项 const duparray = bidarray.filter(bid => bid[1] === highestBid); // 3. 随机选择赢家 const randomIndex = Math.floor(Math.random() * duparray.length); const winner = duparray[randomIndex]; // 输出结果 console.log("重复最高出价的数组:", duparray); console.log("最终赢家:", winner);
你可以把这段代码复制到浏览器控制台或者Node环境里运行,就能看到效果啦~
内容的提问来源于stack exchange,提问作者madruk20




