如何在JavaScript对象数组中查找值最小的大象对象
问题描述
需要从存储大象信息的对象集合中,查找属性值与minimum变量匹配的项,返回对应的完整目标对象。现有代码已完成大象对象数组的初步构造,在嵌套循环中计算得到了最小质量值minimum,但未实现目标对象的匹配查找逻辑。
现有代码
let numberOfElephants = 6; let massOfElephants = [2400, 2000, 1200, 2400, 1600, 4000]; let startOrder = [1, 4, 5, 3, 6, 2]; let endOrder = [5, 3, 2, 4, 6, 1]; const elephantObject = []; startOrder.forEach((order, i) => { elephantObject.push({ [order]: massOfElephants[i] }); }); for (let i = 0; i < numberOfElephants; i++) { for (let j = 0; j < numberOfElephants; j++) { const indexOfCorrect = proposedOrder.findIndex( (num) => num === endOrder[j] ); const itemAtGivenOrder = startOrder[indexOfCorrect]; const [value] = Object.values(elephantObject[i]); const [valueOfStarter] = Object.values(elephantObject[startOrder[i]]); const minimum = Math.min( elephantAtGivenCorrectIndex[itemAtGivenOrder], value ); } }
代码提示:片段中
proposedOrder、elephantAtGivenCorrectIndex未声明定义,直接运行会抛出引用错误,使用前需先完成变量赋值。
实现方案
- 匹配已计算出的
minimum对应对象:在minimum变量定义的位置后,直接用数组find方法遍历elephantObject,对比每个对象的属性值与minimum,命中后即返回完整目标对象// 追加在const minimum = ... 代码后 const targetElephant = elephantObject.find(item => { const mass = Object.values(item)[0]; return mass === minimum; }); - 若不需要保留
minimum的中间计算逻辑,可直接用reduce一次遍历拿到质量最小的大象对象,减少遍历次数提升性能const lightestElephant = elephantObject.reduce((minItem, currentItem) => { const minMass = Object.values(minItem)[0]; const currentMass = Object.values(currentItem)[0]; return currentMass < minMass ? currentItem : minItem; });
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

