我有一个排序的数组是

array = [
    { id: 1, orderTotal: 50000 },
    { id: 3, orderTotal: 50000 },
    { id: 2, orderTotal: 100000 },
    { id: 4, orderTotal: 200000 },
] 

我想找到所有的订单总数,如果最近的话总价.

这是我的代码

const getNearestOrderValue = (arr, totalPrice) => {
    let nearestItem = [];
    let maxSmaller = 0;
    
    for (const item of arr) {
        if (item?.orderTotal <= totalPrice && item?.orderTotal >= maxSmaller) {
          maxSmaller = item?.orderTotal;
          nearestItem.push(item);
        }
    }
    return nearestItem;
}

如果总价格=80000,我代码返回正确结果为

[
   { id: 1, orderTotal: 50000 },
   { id: 3, orderTotal: 50000 },
]

但是如果总价格是120000,我的代码结果是

[
  { id: 1, orderTotal: 50000 },
  { id: 3, orderTotal: 50000 },
  { id: 2, orderTotal: 100000 }
]

我想要的结果是

[
 { id: 2, orderTotal: 100000 }
]

如何修复此getNearestOrderValue函数以正确响应?我期待着得到任何人的帮助.

推荐答案

当您找到一个更接近的值时,您只需重置您的输出array.不需要循环2*n次,也绝对不需要循环n^2次.

const array = [
    { id: 1, orderTotal: 50000 },
    { id: 3, orderTotal: 50000 },
    { id: 2, orderTotal: 100000 },
    { id: 4, orderTotal: 200000 },
];

const getNearestOrderValue = (arr, totalPrice) => {
    let nearestItem = [];
    let maxSmaller = 0;
    
    for (const item of arr) {
        if (item?.orderTotal > totalPrice) {
          break;
        } else if (item?.orderTotal >= maxSmaller) {
          if (item?.orderTotal > maxSmaller) {
            maxSmaller = item?.orderTotal;
            nearestItem = [];
          }
          nearestItem.push(item);
        }
    }
    return nearestItem;
}

console.log(getNearestOrderValue(array, 50000));
console.log(getNearestOrderValue(array, 120000));

正如尼克·帕森斯在 comments 中指出的那样,一旦遇到大于totalPriceorderTotal,你甚至可以跳出循环.

Javascript相关问答推荐

Express.js:使用Passport.js实现基于角色的身份验证时出现太多重定向问题

具有相同参数的JS类

根据总价格对航班优惠数组进行排序并检索前五个结果- Angular HTTP请求

仅圆角的甜甜圈图表

我可以从React中的出口从主布局调用一个处理程序函数吗?

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

如何从隐藏/显示中删除其中一个点击?

简单的PayPal按钮集成导致404错误

无法读取未定义错误的属性路径名''

是什么导致了这种奇怪的水平间距错误(?)当通过JavaScript将列表项元素追加到无序列表时,是否在按钮之间?

OnClick更改Json数组JSX中的图像源

如何使本地html页面在重新加载时保持当前可隐藏部分的打开状态?

Jexl to LowerCase()和Replace()

FireBase FiRestore安全规则-嵌套对象的MapDiff

如何在FiRestore中的事务中使用getCountFromServer

为什么NULL不能在构造函数的.Prototype中工作

如何创建一个for循环,用于计算仪器刻度长度并将其放入一个HTML表中?

JavaScript -如何跳过某个字符(S)来打乱字符串中的字符

使用JavaScript或PHP从div ID值创建锚标记和链接

如何使用Angular JS双击按钮