Javascript 将3层数组映射到对象集合
我正在努力使3层数组分组正确映射到单个对象集合,每层作为对象的键名,数组值作为键值 三个阵列按层相互关联,结构如下:Javascript 将3层数组映射到对象集合,javascript,Javascript,我正在努力使3层数组分组正确映射到单个对象集合,每层作为对象的键名,数组值作为键值 三个阵列按层相互关联,结构如下: { tier1: ['tier1-item1', 'tier1-item2'], tier2: ['tier2-item1', 'tier2-item2', 'tier2-item3', 'tier2-item4', 'tier2-item5'], tier3: ['tier3-item1', 'tier3-item2', 'tier3-item3'] } [
{
tier1: ['tier1-item1', 'tier1-item2'],
tier2: ['tier2-item1', 'tier2-item2', 'tier2-item3', 'tier2-item4', 'tier2-item5'],
tier3: ['tier3-item1', 'tier3-item2', 'tier3-item3']
}
[
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item3"},
]
function(input) {
let arr = [];
for (let i = 0; i < input["tier1"].length; i++) {
for (let j = 0; j < input["tier2"].length; j++) {
for (let k = 0; k < input["tier3"].length; k++) {
let obj = {
tier1: input["tier1"][i],
tier2: input["tier2"][j],
tier3: input["tier3"][k]
};
arr.push(obj);
}
}
}
return arr;
}
function allCombinations(input) {
let result = [];
(function recurse(input, n, outObject, outputArray) {
if (n > Object.keys(input).length) {
outputArray.push(outObject);
return;
}
let str = "tier" + n;
for (let i = 0; i < input[str].length; i++) {
let obj = Object.assign({}, outObject);
obj[str] = input[str][i];
recurse(input, n+1, obj, outputArray);
}
})(input, 1, {}, result);
return result;
}
它们需要生成一个对象数组,如下所示:
{
tier1: ['tier1-item1', 'tier1-item2'],
tier2: ['tier2-item1', 'tier2-item2', 'tier2-item3', 'tier2-item4', 'tier2-item5'],
tier3: ['tier3-item1', 'tier3-item2', 'tier3-item3']
}
[
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item3"},
]
function(input) {
let arr = [];
for (let i = 0; i < input["tier1"].length; i++) {
for (let j = 0; j < input["tier2"].length; j++) {
for (let k = 0; k < input["tier3"].length; k++) {
let obj = {
tier1: input["tier1"][i],
tier2: input["tier2"][j],
tier3: input["tier3"][k]
};
arr.push(obj);
}
}
}
return arr;
}
function allCombinations(input) {
let result = [];
(function recurse(input, n, outObject, outputArray) {
if (n > Object.keys(input).length) {
outputArray.push(outObject);
return;
}
let str = "tier" + n;
for (let i = 0; i < input[str].length; i++) {
let obj = Object.assign({}, outObject);
obj[str] = input[str][i];
recurse(input, n+1, obj, outputArray);
}
})(input, 1, {}, result);
return result;
}
因此,所有可能的项目组合都有一个对象
我不一定要寻找代码示例,尽管它们很受欢迎,但更多的是朝着正确方向es5+的概念性推进。您需要一个简单的嵌套循环,如下所示:
{
tier1: ['tier1-item1', 'tier1-item2'],
tier2: ['tier2-item1', 'tier2-item2', 'tier2-item3', 'tier2-item4', 'tier2-item5'],
tier3: ['tier3-item1', 'tier3-item2', 'tier3-item3']
}
[
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item3"},
]
function(input) {
let arr = [];
for (let i = 0; i < input["tier1"].length; i++) {
for (let j = 0; j < input["tier2"].length; j++) {
for (let k = 0; k < input["tier3"].length; k++) {
let obj = {
tier1: input["tier1"][i],
tier2: input["tier2"][j],
tier3: input["tier3"][k]
};
arr.push(obj);
}
}
}
return arr;
}
function allCombinations(input) {
let result = [];
(function recurse(input, n, outObject, outputArray) {
if (n > Object.keys(input).length) {
outputArray.push(outObject);
return;
}
let str = "tier" + n;
for (let i = 0; i < input[str].length; i++) {
let obj = Object.assign({}, outObject);
obj[str] = input[str][i];
recurse(input, n+1, obj, outputArray);
}
})(input, 1, {}, result);
return result;
}
功能(输入){
设arr=[];
for(设i=0;i
对于n个这样的层的通用解决方案,我们可以按如下方式进行无嵌套:
{
tier1: ['tier1-item1', 'tier1-item2'],
tier2: ['tier2-item1', 'tier2-item2', 'tier2-item3', 'tier2-item4', 'tier2-item5'],
tier3: ['tier3-item1', 'tier3-item2', 'tier3-item3']
}
[
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item3"},
]
function(input) {
let arr = [];
for (let i = 0; i < input["tier1"].length; i++) {
for (let j = 0; j < input["tier2"].length; j++) {
for (let k = 0; k < input["tier3"].length; k++) {
let obj = {
tier1: input["tier1"][i],
tier2: input["tier2"][j],
tier3: input["tier3"][k]
};
arr.push(obj);
}
}
}
return arr;
}
function allCombinations(input) {
let result = [];
(function recurse(input, n, outObject, outputArray) {
if (n > Object.keys(input).length) {
outputArray.push(outObject);
return;
}
let str = "tier" + n;
for (let i = 0; i < input[str].length; i++) {
let obj = Object.assign({}, outObject);
obj[str] = input[str][i];
recurse(input, n+1, obj, outputArray);
}
})(input, 1, {}, result);
return result;
}
函数所有组合(输入){
让结果=[];
(函数递归(输入、n、输出对象、输出阵列){
如果(n>Object.keys(input.length){
outputArray.push(outObject);
返回;
}
让str=“tier”+n;
for(设i=0;i
基本上,我们选择一个层的每个元素,克隆它并将其递归到下一层,直到我们到达终点。您需要一个简单的嵌套循环,如下所示:
{
tier1: ['tier1-item1', 'tier1-item2'],
tier2: ['tier2-item1', 'tier2-item2', 'tier2-item3', 'tier2-item4', 'tier2-item5'],
tier3: ['tier3-item1', 'tier3-item2', 'tier3-item3']
}
[
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item3"},
]
function(input) {
let arr = [];
for (let i = 0; i < input["tier1"].length; i++) {
for (let j = 0; j < input["tier2"].length; j++) {
for (let k = 0; k < input["tier3"].length; k++) {
let obj = {
tier1: input["tier1"][i],
tier2: input["tier2"][j],
tier3: input["tier3"][k]
};
arr.push(obj);
}
}
}
return arr;
}
function allCombinations(input) {
let result = [];
(function recurse(input, n, outObject, outputArray) {
if (n > Object.keys(input).length) {
outputArray.push(outObject);
return;
}
let str = "tier" + n;
for (let i = 0; i < input[str].length; i++) {
let obj = Object.assign({}, outObject);
obj[str] = input[str][i];
recurse(input, n+1, obj, outputArray);
}
})(input, 1, {}, result);
return result;
}
功能(输入){
设arr=[];
for(设i=0;i
对于n个这样的层的通用解决方案,我们可以按如下方式进行无嵌套:
{
tier1: ['tier1-item1', 'tier1-item2'],
tier2: ['tier2-item1', 'tier2-item2', 'tier2-item3', 'tier2-item4', 'tier2-item5'],
tier3: ['tier3-item1', 'tier3-item2', 'tier3-item3']
}
[
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item1"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item1"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item2"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item2"},
{tier1: "tier1-item1", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item1", tier2: "tier2-item5", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item1", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item2", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item3", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item4", tier3: "tier3-item3"},
{tier1: "tier1-item2", tier2: "tier2-item5", tier3: "tier3-item3"},
]
function(input) {
let arr = [];
for (let i = 0; i < input["tier1"].length; i++) {
for (let j = 0; j < input["tier2"].length; j++) {
for (let k = 0; k < input["tier3"].length; k++) {
let obj = {
tier1: input["tier1"][i],
tier2: input["tier2"][j],
tier3: input["tier3"][k]
};
arr.push(obj);
}
}
}
return arr;
}
function allCombinations(input) {
let result = [];
(function recurse(input, n, outObject, outputArray) {
if (n > Object.keys(input).length) {
outputArray.push(outObject);
return;
}
let str = "tier" + n;
for (let i = 0; i < input[str].length; i++) {
let obj = Object.assign({}, outObject);
obj[str] = input[str][i];
recurse(input, n+1, obj, outputArray);
}
})(input, 1, {}, result);
return result;
}
函数所有组合(输入){
让结果=[];
(函数递归(输入、n、输出对象、输出阵列){
如果(n>Object.keys(input.length){
outputArray.push(outObject);
返回;
}
让str=“tier”+n;
for(设i=0;i
基本上,我们选择一个层的每个元素,克隆它并将其递归到下一层,直到我们到达终点。您可以使用reduce迭代所有数据并设置为创建具有唯一值的数组
// pass to reduce an empty object as initial value, let's call it accumulator
data.reduce((accumulator, currentValue, index) => {
// get single object and iterate its keys
for(let key in currentValue) {
// check if accumulator contains already the key
// if yes
if (accumulator.hasOwnProperty(key)) {
// update the Set (internally with automaticcaly remove the duplicate values)
accumulator[key].add(currentValue[key])
} else {
// if not, create the Set
accumulator[key] = new Set([currentValue[key]]);
}
}
// Have we finish looping?
// If yes, we have to convert Set to Array
if (index === data.length - 1) {
const finalObject = {};
Object.keys(accumulator).forEach(singleKey => {
finalObject[singleKey] = Array.from(accumulator[singleKey]);
})
return finalObject;
} else {
// if not we continue
return accumulator
}
}, {});
可以使用reduce迭代所有数据,并使用Set创建具有唯一值的数组
// pass to reduce an empty object as initial value, let's call it accumulator
data.reduce((accumulator, currentValue, index) => {
// get single object and iterate its keys
for(let key in currentValue) {
// check if accumulator contains already the key
// if yes
if (accumulator.hasOwnProperty(key)) {
// update the Set (internally with automaticcaly remove the duplicate values)
accumulator[key].add(currentValue[key])
} else {
// if not, create the Set
accumulator[key] = new Set([currentValue[key]]);
}
}
// Have we finish looping?
// If yes, we have to convert Set to Array
if (index === data.length - 1) {
const finalObject = {};
Object.keys(accumulator).forEach(singleKey => {
finalObject[singleKey] = Array.from(accumulator[singleKey]);
})
return finalObject;
} else {
// if not we continue
return accumulator
}
}, {});
那排序呢,你对具体的顺序有什么要求吗?排序不是必需的。那排序呢,你对具体的顺序有什么要求吗?排序不是必需的。我觉得很愚蠢。虽然不喜欢筑巢。谢谢虽然嵌套效率更高,但我已经编辑了答案,将n层的递归解决方案包括在内,没有嵌套。我觉得很愚蠢。虽然不喜欢筑巢。谢谢虽然嵌套更有效,但我已经编辑了答案,以包含一个针对n层的递归解决方案,而不需要嵌套。