JQuery / Javascript несколько комбинаций массивов

javascript jquery

2427 просмотра

2 ответа

3091 Репутация автора

Я пытался найти решение этой проблемы безрезультатно. Идея того, чего я пытаюсь достичь, состоит в том, чтобы найти все уникальные комбинации нескольких списков. Итак, допустим, у меня есть 3 списка флажков (но это неизвестное число в реальном приложении), Цвет, Размер, Размер упаковки. Элементы в списке будут незаполненными.

[0] => ['blue', 'green']
[1] => ['small', 'medium', 'large']
[2] => ['Pack Of 6', 'Pack Of 8']

Я хочу получить « Синий, маленький, пакет из 6 », « Синий, средний, пакет из 6 », « Синий, большой, пакет из 6 », « Синий, маленький, пакет из 8 », « Синий, средний, Упаковка из 8 "и т. Д. Порядок не важен, но было бы неплохо, чтобы он был логически сгруппирован.

Я уже вытащил списки в массив с помощью jQuery:

       options = [];

       jQuery('.option-types').each(function(){
            opts = [];
            jQuery('input:checked', this).each(function(){
                opts.push(jQuery(this).next().text());
            });
            options.push(opts)
        });

Если существует рекурсивный функциональный путь для ответа на этот вопрос, который был бы идеальным, как я сказал, количество списков может быть любым, а также содержимое списков.

Надеюсь, вы, парни и девушки, можете помочь.

Ура - Дэн

Автор: dan richardson Источник Размещён: 28.10.2009 10:22

Ответы (2)


0 плюса

7715 Репутация автора

Вы можете изменить исходный код Java со страницы http://www.1your.com/drupal/FullCodeFindingAllStringCombinationUsingRecursion для JavaScript - идея должна быть проста для понимания, даже если вы не очень знакомы с Java. Я сомневаюсь, что есть готовое решение для этого.

Автор: simon Размещён: 28.10.2009 10:43

7 плюса

22241 Репутация автора

Решение

Это должно работать :)

var recursiveSearch;
var possibilities = [];

recursiveSearch = function (text, depth )
{
 text = text || "";
 depth = depth || 0;
 for ( var i = 0; i < options[depth].length; i++ )
 {
   // is there one more layer?
   if ( depth +1 < options.length )
     // yes: iterate the layer
     recursiveSearch ( text + ((text=="") ? "" : " ") + options[depth][i] , depth +1 );
   else
     // no: this is the last layer. we add the result to the array
     possibilities.push ( text + options[depth][i] );
 }
}


recursiveSearch ( );

с вашим массивом

[0] => ['blue', 'green']
[1] => ['small', 'medium', 'large']
[2] => ['Pack Of 6', 'Pack Of 8']

результат будет что-то вроде этого:

  1. синий маленький пакет из 6
  2. синий маленький пакет из 8
  3. синий средний пакет из 6
  4. ...
Автор: jantimon Размещён: 28.10.2009 10:49
Вопросы из категории :
32x32