我正在尝试使用排列功能,但这让我感到困惑。
示例数据集:
{
a: [1,2],
b: [1,2,3],
c: [1,2]
}
所需的输出:
[
[ 'a-1', 'b-1', 'c-1' ],
[ 'a-1', 'b-1', 'c-2' ],
[ 'a-1', 'b-2', 'c-1' ],
[ 'a-1', 'b-2', 'c-2' ],
[ 'a-1', 'b-3', 'c-1' ],
[ 'a-1', 'b-3', 'c-2' ],
[ 'a-2', 'b-1', 'c-1' ],
[ 'a-2', 'b-1', 'c-2' ],
[ 'a-2', 'b-2', 'c-1' ],
[ 'a-2', 'b-2', 'c-2' ],
[ 'a-2', 'b-3', 'c-1' ],
[ 'a-2', 'b-3', 'c-2' ],
]
到目前为止,我已遍历Object
,然后针对每个Array
迭代key
,然后需要再次执行此操作..
首先,我把这些值打破了:
[
[ 'a-1', 'a-2' ],
[ 'b-1', 'b-2', 'b-3' ],
[ 'c-1', 'c-2' ]
]
然后迭代它们:
var list_joined = []
var list = []
array.forEach((key, index) => {
key.forEach((value) => {
var tmp = [value]
array.forEach((_value, _index) => {
if(_index != index) {
tmp.push(_value[0])
}
})
tmp = tmp.sort()
if(list_joined.indexOf(tmp.join('_')) < 0) {
list_joined.push(tmp.join('_'))
list.push(tmp)
}
})
})
结果
[
[ 'a-1', 'b-1', 'c-1' ],
[ 'a-1', 'b-1', 'c-2' ],
[ 'a-1', 'b-2', 'c-1' ],
[ 'a-1', 'b-3', 'c-1' ],
[ 'a-2', 'b-1', 'c-1' ]
]
我无法完全了解修复迭代过程的位置。
答案 0 :(得分:2)
您可以使用迭代和递归方法。
function combine(object) {
function c(part, index) {
object[keys[index]].forEach(function (a) {
var p = part.concat(keys[index] + '-' + a);
if (p.length === keys.length) {
r.push(p);
return;
}
c(p, index + 1);
});
}
var keys = Object.keys(object),
r = [];
c([], 0);
return r;
}
var data = { a: [1, 2], b: [1, 2, 3], c: [1, 2] },
result = combine(data);
console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;