我不知道如何制定权利。但我需要做下一件事。
我们有下一个数据结构:
a = [
{
name: "size",
'values': ['S', 'M', 'L']
},
{
name: 'color',
'values': ['B', 'G', 'Y'],
},
{
name: 'material',
'values': ['X', 'Y']
}
]
从此需要生成下一个数组:
['SBX', 'SBY', 'SGX', 'SGY', 'SYX', 'SYY', 'MBX, 'MBY', ..., 'LYY']
我的任务中是否存在一些算法?或简单的例子。谢谢!
答案 0 :(得分:0)
我这样做:
let a = [
{
name: "size",
'values': ['S', 'M', 'L']
},
{
name: 'color',
'values': ['B', 'G', 'Y'],
},
{
name: 'material',
'values': ['X', 'Y']
}
]
let output = []
a[0].values.forEach( size => {
a[1].values.forEach( color => {
a[2].values.forEach( material =>{
output.push(size+color+material)
})
})
})
console.log(output) // ['SBX', 'SBY', 'SGX', 'SGY', 'SYX', 'SYY', 'MBX, 'MBY', ..., 'LYY']

答案 1 :(得分:0)
首先:将您的值组合在一个数组中。你可以使用Array#reduce
来做到这一点var a = [
{
name: "size",
'values': ['S', 'M', 'L']
},
{
name: 'color',
'values': ['B', 'G', 'Y'],
},
{
name: 'material',
'values': ['X', 'Y']
}
]
// Merge values together in one array
var values = a.reduce((acc, item) => {
acc.push(item.values);
return acc;
}, []);
然后使用辅助函数生成可能的值。
从此SO answer复制:
// Helper function
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;
}
}
然后将你的大数组传递给这个函数
var outPut = allPossibleCases(values);
所有代码:
var a = [{
name: "size",
'values': ['S', 'M', 'L']
},
{
name: 'color',
'values': ['B', 'G', 'Y'],
},
{
name: 'material',
'values': ['X', 'Y']
}
]
// Merge values together in one array
var values = a.reduce((acc, item) => {
acc.push(item.values);
return acc;
}, []);
// Helper function
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;
}
}
var outPut = allPossibleCases(values);
console.log(outPut);
/*
[
"SBX",
"MBX",
"LBX",
"SGX",
"MGX",
"LGX",
"SYX",
"MYX",
"LYX",
"SBY",
"MBY",
"LBY",
"SGY",
"MGY",
"LGY",
"SYY",
"MYY",
"LYY"
]
*/
答案 2 :(得分:0)
这是一个工作示例,只需处理每个数组,将所有项目连接到现有数组的所有项目并构建一个新数组,然后继续......
var a = [{
name: "size",
'values': ['S', 'M', 'L']
},
{
name: 'color',
'values': ['B', 'G', 'Y'],
},
{
name: 'material',
'values': ['X', 'Y']
}
]
function transformData(arr) {
var res = [];
var appendWithExisting = function(exist, curr) {
var ret = [];
if (!exist || !exist.length) {
return curr.slice()
}
for (var i = 0; i < curr.length; i++) {
var b = curr[i];
for (var j = 0; j < exist.length; j++) {
ret.push(exist[j] + b);
}
}
return ret;
}
for (var idx = 0; idx < arr.length; idx++) {
res = appendWithExisting(res, arr[idx].values);
}
return res;
}
console.log(transformData(a))
&#13;