繁体   English   中英

我有一组对象。 我想随机 output 个对象,其值的总和等于八

[英]I have an array of objects. I want to randomly output objects whose sum of values ​is equal to eight

    
const obj = 
    [
        {noir: 1},
        {croch: 0.5},
        {doubleCroch: 1},
        {triollet: 1.5},
        {quatreDouble: 2} 

    
];


所需的 output 示例:

2, 2, 0.5, 0.5, 1, 2

 for (var i = 0 ; i < obj.length ; i++ ){
        var randomItem = obj[Math.floor(Math.random()*obj.length )];
        
    }


这给我带来了五个随机项目。 但我想要元素的值之和等于 8。

它看起来像随机内的条件

我想你在这里有几个选择:

1. 万无一失的方法

您计算并收集总和为 8 的所有可能组合。然后您随机选择一个组合。 这可能在计算上很昂贵,尤其是因为您似乎允许重复。 实施起来并不容易。

2. 随遇而安的方法

你一直在从你的 object 中随机挑选元素,并跟踪总和。 如果总和达到 8,则您有一个获胜组合。 如果超过 8,则从头开始。 更容易实现,但理论上可能会无限运行。

3.过度设计的方法

开始时与之前的方法相同,但如果总和超过 8,则丢弃最后选择的元素并选择另一个。 这将要求您跟踪您已经为每个选择的元素尝试过的所有元素,因为您可能需要回溯到比最后一个选择的元素更远的地方。 这将是最难实施的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM