Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将3层数组映射到对象集合_Javascript - Fatal编程技术网

Javascript 将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'] } [

我正在努力使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", 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层的递归解决方案,而不需要嵌套。