【问题标题】:Get all variants from a multidimensional array in javascript [duplicate]从javascript中的多维数组中获取所有变体[重复]
【发布时间】:2016-05-02 09:37:45
【问题描述】:

我在js中有如下数组:

var list = [
  ['nice', 'delicious', 'red'],
  ['big', 'tiny'],
  ['apple']
];

我想获得所有可能的变化,例如:

['nice', 'big', 'apple']
['delicious', 'big', 'apple']
['red', 'big', 'apple']
['nice', 'tiny', 'apple']
...

实现这一目标的最佳/最有说服力的方法是什么?

【问题讨论】:

  • 可能变化的长度是多少?如果两个不同的数组具有相同的值,可以在可能的变化中重复吗?
  • 如果两个数组的值相同,则可以在最终结果中复制它。最后,我只需要一个包含原始数组所有可能变化的数组。

标签: javascript arrays multidimensional-array


【解决方案1】:

我试图想出一些非常奇特的东西,比如递归或地图堆栈和归约,但这个问题似乎没有那么复杂,无法证明与以下不同的东西是正确的:

var result = list[0].map(function(item) { return [item]; });

for (var k = 1; k < list.length; k++) {
    var next = [];
    result.forEach(function(item) {
        list[k].forEach(function(word) {
            var line = item.slice(0);
            line.push(word);
            next.push(line);
        })
    });
    result = next;
}

console.log(result);

【讨论】:

    【解决方案2】:

    编辑:这没有回答 OP 的问题,主题略有不同。这应该是正确的。

    Finding All Combinations of JavaScript array values

    我会从更“一般”的角度来处理这个问题。您有一个数组,并希望从中获取一个随机值。只要你知道数组的长度,这很容易。我这样做的方法是,从单个数组的“长度”属性生成一个随机索引并将其拉出。

    这是一个快速而肮脏的演示。

    var sentence = '';
    var fragments = [
      ['delicious', 'bad', 'gross'],
      ['red', 'green', 'blue'],
      ['apple', 'orange', 'basketball']
    ];
    
    // This could be used over and over for any array,
    // just pass it the length
    function randomIndex(i) {
      return Math.floor(Math.random() * i);
    }
    
    // This is more specific to your use case, go into each
    // each child array and just pick a random element
    fragments.forEach(function(el) {
      possibleIndex = randomIndex(el.length);
      // Join the next piece
      sentence += el[randomIndex(possibleIndex)] + ' ';
    });
    
    // Do something with sentence here
    console.log(sentence) //=> 'bad green apple'
    

    您当然可以清除它,并且每次都需要清除该句子变量。就像我说的,又快又脏。像这样的东西应该被抽象出来,并且是下划线和 lodash 等库的常见用例。

    这是一个展示它在行动中的垃圾箱。

    https://jsbin.com/guxiziwoqa/edit?html,js,output

    【讨论】:

    • 感谢 Dustin 的回复,但我需要一个包含所有可能变体的数组,而不仅仅是随机变体。我不确定我是否可以使用您的解决方案来获得所有这些。也许我太蹩脚了。 :)
    • 啊,是的,我现在明白了!这个问题在这篇文章中得到了相当优雅的回答stackoverflow.com/questions/4331092/…
    猜你喜欢
    • 2021-12-01
    • 2012-05-03
    • 2018-07-22
    • 1970-01-01
    • 2021-10-17
    • 2019-06-10
    • 1970-01-01
    • 2023-02-01
    • 2017-05-15
    相关资源
    最近更新 更多