Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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对象与不同类型的值(如字符串、对象和数组)的笛卡尔积_Javascript_Arrays_Javascript Objects_Cartesian Product - Fatal编程技术网

javascript对象与不同类型的值(如字符串、对象和数组)的笛卡尔积

javascript对象与不同类型的值(如字符串、对象和数组)的笛卡尔积,javascript,arrays,javascript-objects,cartesian-product,Javascript,Arrays,Javascript Objects,Cartesian Product,我正在做一项任务。 我有下面的对象形式 { name: "name here", skills: [ "cash", "shares" ], subjects: [ { subName: "subject1", remark: ['remark1', 'remark2'] }, { subName: "subject2", remark

我正在做一项任务。 我有下面的对象形式

{
    name: "name here",
    skills:  [ "cash", "shares" ],
    subjects: 
    [ 
      {
        subName: "subject1",
            remark: ['remark1', 'remark2']
          },
      {
        subName: "subject2",
            remark: ['remark1', 'Hockey']
          }
    ]
}
我希望生成属性的笛卡尔积,以便输出为以下形式的数组:

[
   { "name": "name here",  "skills":  "cash",   "subjects": {  "subName":    "subject1", “remark”: “remark2” }},
   { "name": "name here",  "skills":  "cash",   "subjects": {  "subName":    "subject1", “remark”: “remark1”  }},
   { "name": "name here",  "skills":  "cash",   "subjects": {  "subName":    "subject2", “remark”: “remark1” }},
   { "name": "name here",  "skills":  "cash",   "subjects": {  "subName":    "subject2",  “remark”: “Hockey” }},
   { "name": "name here",  "skills":  "shares",  "subjects": {  "subName":  "subject1",  “remark”: “remark1” }},
   { "name": "name here",  "skills":  "shares",  "subjects": {  "subName":   "subject1",  “remark”: “remark2” }},
   { "name": "name here",  "skills":  "shares",  "subjects": {  "subName":  "subject2",  “remark”: “remark1”   }},
   { "name": "name here",  "skills":  "shares",  "subjects": {  "subName":  "subject2",  “remark”: “Hockey”  }}
]
我尝试过很多算法(在其他SO帖子中提到过),甚至尝试过定制其中一些算法,但仍然没有太多改进

我真的非常感谢在这方面的任何帮助。
提前感谢您的帮助。

如果带有对象的数组再次调用
getCartesian
并构建新对象,您可以使用递归函数分离所有键/值对,并通过迭代值来构建新的笛卡尔积

被引用的对象不起作用,因为链接答案不尊重给定的对象数组

函数getCartesian(对象){ 返回Object.entries(Object).reduce((r[k,v])=>{ var-temp=[]; r、 forEach(s=> (Array.isArray(v)?v:[v]).forEach(w=> (w&&typeof w==='object'?getCartesian(w):[w])。forEach(x=> 临时推送(对象赋值({},s,{[k]:x})) ) ) ); 返回温度; }, [{}]); } var数据={name:“name here”,技能:[“cash”,“shares”],主题:[{subName:“subject1”,备注:['remark1','remark2']},{subName:“subject2”,备注:['remark1','Hockey']}; log(getCartesian(data))
。作为控制台包装{max height:100%!important;top:0;}
您尝试了什么?@JonasW。我已经尝试了其他文章中给出的解决方案,比如下面的文章,我在他们的算法中加入了一些条件来区分数组和对象。但我不知道如何寻找更深层次的数组或对象。对不起,我不擅长递归方法。