我在使用多个多选框的选定值创建字符串时遇到问题,让我通过以下示例进行解释:
假设我在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));
}
请帮助..
答案 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