如何简化物品适配箱体的多组合if条件判断语句?
简化物品尺寸适配箱体的条件判断逻辑
你完全不需要枚举所有6种尺寸排列组合,核心思路是对物品和箱体的尺寸分别排序后,逐一对应比较——因为物品无论怎么旋转,它的最小、中间、最大尺寸是固定的,只要这三个值分别不超过箱体的对应尺寸,就一定能装下。
具体实现步骤
- 将物品的三个尺寸放入数组,按升序排序
- 将箱体的三个尺寸放入数组,按升序排序
- 比较排序后的对应位置:物品的最小尺寸 ≤ 箱体最小尺寸,中间尺寸 ≤ 箱体中间尺寸,最大尺寸 ≤ 箱体最大尺寸,三者同时满足则适配。
代码示例(JavaScript)
// 示例尺寸 const itemSize = [7, 3, 2]; const boxSize = [7, 5, 3]; // 排序后比较 const sortedItem = itemSize.sort((a, b) => a - b); const sortedBox = boxSize.sort((a, b) => a - b); if (sortedItem[0] <= sortedBox[0] && sortedItem[1] <= sortedBox[1] && sortedItem[2] <= sortedBox[2]) { console.log("your item fits in this box!"); } else { console.log("your item doesn't fit in this box!"); }
封装成可复用函数
如果需要多次调用,可以封装成更简洁的函数:
function checkItemFit(itemDims, boxDims) { // 复制数组避免修改原数据,再排序 const sortedItem = [...itemDims].sort((a, b) => a - b); const sortedBox = [...boxDims].sort((a, b) => a - b); // 用every方法批量比较对应维度 return sortedItem.every((dim, index) => dim <= sortedBox[index]); } // 测试 console.log(checkItemFit([7,3,2], [7,5,3])); // 输出 true console.log(checkItemFit([9,2,2], [7,5,3])); // 输出 false
逻辑说明
这种方法的本质是抓住了尺寸适配的核心:物品的三个维度的极值(最小、中、最大)必须全部被箱体的极值覆盖。无论怎么旋转物品,都无法改变它的极值,所以只要极值满足条件,就一定存在一种摆放方式让物品装入箱体;反之,如果有一个极值超过箱体对应极值,无论怎么摆都装不下。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

