Javascript 编写嵌套映射函数

Javascript 编写嵌套映射函数,javascript,arrays,mapping,Javascript,Arrays,Mapping,我有一个这样的物体: const object = { detectors: [1, 2], responders: [4, 22], activators: [5, 23, 31], enablers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], upgraders: [14, 15, 16, 17, 18, 19, 20, 21, 22], catalyzer: [12, 29], chains: [27], trappers:

我有一个这样的物体:

const object = {
detectors: [1, 2],
  responders: [4, 22],
  activators: [5, 23, 31],
  enablers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
  upgraders: [14, 15, 16, 17, 18, 19, 20, 21, 22],
  catalyzer: [12, 29],
  chains: [27],
  trappers: [13],
  finishers: [16],
}
object.activators.map((activator, i) => {
  return object.detectors.map((detector, i) => {
    return object.responders.map((responder, i) => {
      return {
        detectors: detector,
        responders: responder,
        activators: activator,
      };
    });
  });
});
预期产出:

[
{
    'detectors': 1,
    'responders': 4,
    'activators': 5,
    'enablers': 1,
    'upgraders': 23,
    'catalyzer': 12,
    'chains': 27,
    'trappers': 13,
    'finishers': 16,
},
{
    'detectors': 2,
    'responders': 4,
    'activators': 5,
    'enablers': 1,
    'upgraders': 23,
    'catalyzer': 12,
    'chains': 27,
    'trappers': 13,
    'finishers': 16,
},
{
    'detectors': 1,
    'responders': 22,
    'activators': 5,
    'enablers': 1,
    'upgraders': 23,
    'catalyzer': 12,
    'chains': 27,
    'trappers': 13,
    'finishers': 16,
},
{...
我已经写了这样一个函数:

const object = {
detectors: [1, 2],
  responders: [4, 22],
  activators: [5, 23, 31],
  enablers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
  upgraders: [14, 15, 16, 17, 18, 19, 20, 21, 22],
  catalyzer: [12, 29],
  chains: [27],
  trappers: [13],
  finishers: [16],
}
object.activators.map((activator, i) => {
  return object.detectors.map((detector, i) => {
    return object.responders.map((responder, i) => {
      return {
        detectors: detector,
        responders: responder,
        activators: activator,
      };
    });
  });
});

我可以编写另一个函数来展平上面代码的输出,但是有没有其他方法可以将上面的代码编写成一个更通用的函数(不是硬编码的),可以应用于任何对象?

您可以使用递归函数从条目中获取所有排列

const对象={
探测器:[1,2,3],
答复者:[4,22],
激活剂:[1,2,3,4]
};
const getPermutations=obj=>{
常数res=[];
常量项=对象项(obj);
常量go=(当前,idx)=>{
const key=entries[idx][0];
对于(条目常量[idx][1]){
const next={…curr[key]:val};
如果(idx!==entries.length-1)转到(下一步,idx+1);
else res.push(下一步);
}
};
go({},0);
返回res;
}

log(getPermutations(object))您可以使用递归函数从条目中获取所有排列

const对象={
探测器:[1,2,3],
答复者:[4,22],
激活剂:[1,2,3,4]
};
const getPermutations=obj=>{
常数res=[];
常量项=对象项(obj);
常量go=(当前,idx)=>{
const key=entries[idx][0];
对于(条目常量[idx][1]){
const next={…curr[key]:val};
如果(idx!==entries.length-1)转到(下一步,idx+1);
else res.push(下一步);
}
};
go({},0);
返回res;
}

log(getPermutations(object))显示您期望的输出可能更简单好的,我只是添加了期望的输出,我不明白为什么会是期望的输出。你有比你显示的更多的属性吗?我的问题是,忘了更改对象。我认为最好使用。减少而不是映射。这样可以更简单地显示你期望的输出。好的,我只是添加了期望的输出。我不明白为什么这会是期望的输出。你有比你显示的更多的属性吗?我的问题是,忘了更改对象。我认为最好使用。减少而不是映射