获取JavaScript对象数组中VRAM值最大的控制器索引
找到VRAM值最大的控制器索引
嘿,这个问题其实很好解决,咱们可以用JavaScript数组的原生方法轻松处理对象数组的极值查找,这里给你两种实用的方案:
方案一:使用reduce(高效推荐)
reduce方法非常适合这种需要遍历数组并累积结果的场景,只需要一次遍历就能搞定,效率很高:
// 你的控制器数组 const controllers = si.graphics.controllers; // 处理空数组的边界情况(可选,根据你的实际场景调整) if (controllers.length === 0) { console.log("没有控制器数据"); return; } // 找到vram最大的元素索引 const maxVramIndex = controllers.reduce((currentMaxIndex, currentItem, currentIndex) => { // 对比当前元素的vram和记录的最大vram return currentItem.vram > controllers[currentMaxIndex].vram ? currentIndex : currentMaxIndex; }, 0); // 初始默认第一个元素为当前最大值 console.log("VRAM最大的控制器索引:", maxVramIndex);
代码解释:
reduce的回调函数会遍历数组中的每一个元素,每次对比当前元素的vram和当前记录的最大索引对应的vram值。- 如果当前元素的
vram更大,就把当前索引更新为新的最大索引;否则保持原来的索引。 - 初始值设为
0,也就是默认第一个元素是当前最大值,之后逐步迭代比较。
方案二:使用map + Math.max(更直观)
如果你觉得reduce有点绕,也可以用更直观的方式,先提取所有vram值,再找最大值对应的索引:
const controllers = si.graphics.controllers; if (controllers.length === 0) { console.log("没有控制器数据"); return; } // 提取所有vram值组成数组 const allVramValues = controllers.map(controller => controller.vram); // 找到最大的vram值 const maxVram = Math.max(...allVramValues); // 找到最大值对应的索引 const maxVramIndex = allVramValues.indexOf(maxVram); console.log("VRAM最大的控制器索引:", maxVramIndex);
注意点:
- 这种方法需要遍历两次数组(一次
map,一次indexOf),如果你的数组非常大,效率会比reduce稍低一点。 - 如果有多个控制器的
vram值都是最大值,indexOf会返回第一个出现的那个索引,和reduce方案的结果一致。
两种方案都能完美解决你的问题,根据你的代码风格和实际场景选就行~
内容的提问来源于stack exchange,提问作者GrumpyCrouton
相关产品推荐
相关产品推荐

