将数组分成较小的块,每个数组匹配一定范围(最小/最大)

时间:2018-07-30 20:33:20

标签: javascript arrays

让我们说我有一些像这样的数据:

var boxes = [
    {
        name: 'Box 1',
        weight: 2,
    },
    {
        name: 'Box 2',
        weight: 5,
    },
    {
       name: 'Box 3',
       weight: 4,
    },
    // Some more boxes
]

是否存在某种功能将这些boxes分成较小的数组,您可以在其中定义每个数组的最小和最大总重量?例如:将boxes分成多个数组,每个数组的总权重在8到10之间,或者如果没有办法像这样将它们分开,则返回false? >

例如:仅考虑数字/权重,结果将如下所示:

// Boxes with weights 7, 6, 5, 5, 5, 5, 4, 4, 4, 3, 2, 1
[
    [7, 1], // Total: 8
    [6, 2], // Total: 8
    [5, 3], // Total: 8
    [5, 5], // Total: 10
    [5, 4], // Total: 9
    [4, 4]  // Total: 8
]
// Boxes with weights 5, 4, 5, 6, 7
[
    [5, 5], // Total: 10
    [4, 6], // Total: 10
    [7], // --> Total lower than minimum (8), function should return false
]

主要是我很难找到逻辑。尽管不是100%的防故障能力,但我有一种获得最大成功的方法。 (有时会说不同权重的组合是不可能的,尽管最小值和最大值是不可能的):

  • 按重量从高到低的顺序对箱子进行排序
  • 从最重的箱子开始,将箱子放在上方,然后添加较轻的箱子(从末端开始),直到达到最小总重量(例如8)。每次将框添加到较小的阵列时,都会将其从较大的阵列中删除。

0 个答案:

没有答案