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/下划线,其他问题的可能重复稍微容易一点。这是一个坏主意。它与没有关系的事物相关。为什么第二个爱好与第二技能和第二语言比其他技能或语言更相关?-->不要这样做。