首页 > 解决方案 > 从数组中获取元素,其加起来的值大于给定值 JavaScript

问题描述

我最近刚开始学习 JavaScript 以提高我的技能,但遇到了一个让我偏离轨道的挑战。

我有一组值,我需要在数组中找到其中的元素,这些元素加起来会给出一个大于单个值集的数字。例如

[50, 100, 400, 800] 的数组

如果我有一个值说 50 它应该返回 50 因为 50 在列表中。这很好,但是如果我有一个 421 的值,它应该返回 [400, 50] 或者如果我有一个 1751 的值,它应该返回 [800, 800, 100, 50, 50] 作为加起来的值给出接近给定值的最小值。

我尝试了以下方法:

  1. 我对数组值进行了排序
  2. 检查数组是否包含给定值,如果是,则在新数组中返回该值
  3. 如果一个值小于最小值且大于下一个值,则返回下一个值,我尝试研究 reduce 方法,但我无法理解它,请提供一些专业知识。

以下是我的代码

const ItemSize = [50, 100, 400, 800]

function getItemSize(itemSize, n) {
  const sortedItemSizes = ItemSize.sort(function compare(a, b) {
    return a - b;
  });
  let item = [];
  if (sortedItemSizes.includes(n)) {
    item.push(n);
  } else if (n > Math.min.apply(Math, sortedItemSizes) && n < sortedItemSizes[1]) {
    item.push(sortedItemSizes[1]);
  }

  return item;
}

console.log(
  getItemSize(ItemSize, 50)
)

标签: javascript

解决方案


你可以:

  • 按降序对数组进行排序
  • 逐个元素,检查它是否可以多次添加到解决方案中。
  • 返回结果数组

const arr = [50, 100, 800, 400];

function findSet(arr, sum) {
  const sorted = arr.sort((a, b) => a < b ? 1 : -1);
  const res = [];
  sorted.forEach(n => {
    while(n <= sum) {
      sum -= n;
      res.push(n);
    }
  });
  return res;
}

console.log(findSet(arr, 51));
console.log(findSet(arr, 100));
console.log(findSet(arr, 150));
console.log(findSet(arr, 1751));


推荐阅读