Javascript 使用子阵列的所有元素创建新阵列

Javascript 使用子阵列的所有元素创建新阵列,javascript,jquery,arrays,Javascript,Jquery,Arrays,我想创建一个输出数组,它从它的子数组中获取所有参数,并创建一个结果数组。 很难用语言来解释,所以我用下面的例子来解释 var myArr=[ { "Id":1, "Name":'Ken', "Age" : '30', "Hobbies" : [{'HobbyId':1,'HobbyName':'Swimmi

我想创建一个输出数组,它从它的子数组中获取所有参数,并创建一个结果数组。 很难用语言来解释,所以我用下面的例子来解释

var myArr=[
                {
                    "Id":1,
                    "Name":'Ken',
                    "Age" : '30',
                    "Hobbies" : [{'HobbyId':1,'HobbyName':'Swimming'},{'HobbyId':2,'HobbyName':'Reading'}],
                    "Skills" : [{'SkillId':1,'SkillName':'PHP'},{'SkillId':2,'SkillName':'MySQL'}],
                    "Language" : [{'LangId':2,'LangName':'English'},{'LangId':3,'LangName':'Chinese'}]
                },
                {
                    "Id":2,
                    "Name":'Mike',
                    "Age" : '20',
                    "Hobbies" : [],
                    "Skills" : [],
                    "Language" : []
                },
                {
                    "Id":3,
                    "Name":'Charlie',
                    "Age" : '25',
                    "Hobbies" : [{'HobbyId':5,'HobbyName':'Dance'},{'HobbyId':6,'HobbyName':'Sing'},{'HobbyId':7,'HobbyName':'Writing'}],
                    "Skills" : [],
                    "Language" : [{'Id':7,'Name':'English'}]
                }
            ]
在上面的示例中,有3个子数组,分别命名为嗜好、技能和语言。 除了这三个,我还有更多的子阵列。 我实际上想删除子阵列逻辑,使其成为平面阵列

<>所以,当创建这个平面数组时,即使子数组是空的,我也要考虑子数组中的所有参数。 因此,我得到的数组的第一项将包含所有子数组的第一项,依此类推。 即使子数组是一个空数组,我也需要考虑其中的关键字并将其作为null输入。< /P> 因此,生成的数组如下所示:

var resultArray = [
                 {
                    "Id":1,
                    "Name":'Ken',
                    "Age" : '30',  
                    "HobbyId" : 1,
                    "HobbyName" : 'Swimming',
                    "SkillId" : 1,
                    "SkillName":'PHP',
                    "LangId" : 2,
                    "LangName" : 'English'
                 },
                 {
                    "Id":1,
                    "Name":'Ken',
                    "Age" : '30',  
                    "HobbyId" : 2,
                    "HobbyName" : 'Reading',
                    "SkillId" : 2,
                    "SkillName":'MySQL',
                    "LangId" : 3,
                    "LangName" : 'Chinese'
                 },
                 {
                    "Id":2,
                    "Name":'Mike',
                    "Age" : '20',
                    "HobbyId" : '',
                    "HobbyName" : '' ,
                    "SkillId" : '',
                    "SkillName":'',
                    "LangId" : '',
                    "LangName" : ''
                 },
                 {
                    "Id":3,
                    "Name":'Charlie',
                    "Age" : '25',
                    "HobbyId" : 5,
                    "HobbyName" : 'Dance',
                    "SkillId" : '',
                    "SkillName":'',
                    "LangId" : 7,
                    "LangName" : 'English'
                 },
                 {
                    "Id":3,
                    "Name":'Charlie',
                    "Age" : '25',
                    "HobbyId" : 6,
                    "HobbyName" : 'Sing',
                    "SkillId" : '',
                    "SkillName":'',
                    "LangId" : '',
                    "LangName" : ''
                 },
                 {
                    "Id":3,
                    "Name":'Charlie',
                    "Age" : '25',
                    "HobbyId" : 7,
                    "HobbyName" : 'Writing',
                    "SkillId" : '',
                    "SkillName":'',
                    "LangId" : '',
                    "LangName" : ''
                 }
             ]

这似乎产生了你想要的:

let results = [];
for(let {Id, Name, Age, Hobbies, Skills, Language} of myArr) {
    let numRows = Math.max(1, Hobbies.length, Skills.length, Language.length);
    for (let i=0; i<numRows; i++) {
        let {HobbyId, HobbyName} = Hobbies[i] || {};
        let {SkillId, SkillName} = Skills[i] || {};
        let {LangId, LangName} = Language[i] || {};
        results.push({
            Id, Name, Age,
            HobbyId, HobbyName,
            SkillId, SkillName,
            LangId, LangName,
        });
    }
}
console.table(results);
let results=[];
为了(让myArr的{Id、姓名、年龄、爱好、技能、语言}){
设numRows=Math.max(1,嗜好.length,技能.length,语言.length);

例如(假设i=0;我认为这是可能的并且相对容易(您可能很快就会得到一些答案),这是一个坏主意,因为你混合了你的数据实体。你最终有2个Ken和3个Charlies。你为什么要这样做?我需要使用jqGrid创建一个带有一些行跨度的表,所以实际上2个Ken和3个Charlies将行跨度设为1,并在行的前面显示他们各自的爱好等,这是实现的唯一方法jqGrid。由于可以使用lodash/下划线,其他问题的可能重复稍微容易一点。这是一个坏主意。它与没有关系的事物相关。为什么第二个爱好与第二技能和第二语言比其他技能或语言更相关?-->不要这样做。