使用javascript过滤数组中所有最接近值的项目

问题描述 投票:0回答:1

我有一个排序数组是

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 函数以正确响应?我期待得到任何人的帮助。

javascript arrays
1个回答
0
投票

您遇到的问题是因为您总是将当前最近的项目推送到最近的项目数组。如果有一个新的最近的项目大于旧的最近的项目,则永远不会从数组中删除这些项目。

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 = nearestItem.filter(n => n < maxSmaller);
      nearestItem.push(item);
    }
   }
   return nearestItem;
}

在本例中,我们将从最近的项目数组中删除较小的项目。

© www.soinside.com 2019 - 2024. All rights reserved.