根据多个多选框

时间:2017-01-08 08:55:34

标签: jquery json drop-down-menu multi-select dropdown

我在使用多个多选框的选定值创建字符串时遇到问题,让我通过以下示例进行解释:

假设我在jQuery中有下拉值,如下所示。

country = [usa, uae, ksa, uk]
products = [animals, meat, clothes]
show-in = [value, weight]
unit= [thousands, millions, kilos, tons]

现在我想创建包含所有组合字符串的数组,例如在上面的例子中:

all_string = 
[usa-animals-value-thousands,
usa-animals-value-millions,
usa-animals-value-kilos,
usa-animals-value-tons,
usa-animals-weight-thousands,
usa-animals-weight-millions,
usa-animals-weight-kilos,
usa-animals-weight-tons,
usa-meat-value-thousands,
usa-meat-value-millions,
.... and so on]

请注意,表单中的选择框数量是动态的,每个选择框可以包含用户选择的任意数量的值。

到目前为止,我已经尝试了不同的方法,并且只能将字符串创建到第一级,就像连接在一起的每个数组的每个第一个元素的字符串一样。但是,我无法以递归方式为每个组合生成此内容。

我目前的代码如下,但这只是一个想法,因为它到目前为止还没有满足我的要求。

var final_data = [];
var data = [];
jQuery('.form-filter select').each(function () {
    data.push(jQuery(this).val());
});
for (var k = 0; k < data[0].length; k++) {

    var str = "";

    for (var j = 0; j < data.length; j++) {
        str += (data[j][i] !== undefined) ? "-" + data[j][i] : ((data[j][i - 1] !== undefined) ? "-" + data[j][i - 1] : "-" + data[j][i - 2]);
    }

    final_data.push(str.slice(1));
}

请帮助..

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决问题的方法。

此功能对我有用

function allPossibleCases(arr) {
  if (arr.length == 1) {
    return arr[0];
  } else {
    var result = [];
    var allCasesOfRest = allPossibleCases(arr.slice(1));  // recur with the rest of array
    for (var i = 0; i < allCasesOfRest.length; i++) {
      for (var j = 0; j < arr[0].length; j++) {
        result.push(arr[0][j] + allCasesOfRest[i]);
      }
    }
    return result;
  }

}

详情请点击此处。 Finding All Combinations of JavaScript array values