Javascript 基于密钥的组合数组
我将有9个动态数组。 我需要考虑一个组合它们的参数ItemNumber来组合它们。 我的大多数数组都只有一个项,只有三个数组可能有多个项 所以假设在下面的例子中Javascript 基于密钥的组合数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,我将有9个动态数组。 我需要考虑一个组合它们的参数ItemNumber来组合它们。 我的大多数数组都只有一个项,只有三个数组可能有多个项 所以假设在下面的例子中 var arr1 = [ { 'IM_Id': 1, 'IM_Name': 'Hello', 'ItemNumber': 2001 }, { 'IM_Id': 2, 'IM_Name': 'World', 'ItemNumber': 2002 } ]; var arr2 = [ { 'FE_Id': 2, 'FE_Name'
var arr1 = [
{ 'IM_Id': 1, 'IM_Name': 'Hello', 'ItemNumber': 2001 },
{ 'IM_Id': 2, 'IM_Name': 'World', 'ItemNumber': 2002 }
];
var arr2 = [
{ 'FE_Id': 2, 'FE_Name': 'Wall', 'Code': 'XYZ', 'ItemNumber': 2001 },
{ 'FE_Id': 3, 'FE_Name': 'WallMart', 'Code': '009F', 'ItemNumber': 2002 }
];
var arr3 = [
{ 'FC_Id': 2, 'FC_Name': 'ABC', 'Value': 009, 'ItemNumber': 2001 },
{ 'FC_Id': 3, 'FC_Name': 'PQR', 'Value': 007, 'ItemNumber': 2001 },
{ 'FC_Id': 4, 'FC_Name': 'ABCD', 'Value': 004, 'ItemNumber': 2002 },
{ 'FC_Id': 5, 'FC_Name': 'PQRS', 'Value': 002, 'ItemNumber': 2002 }
];
在上面的数组中,arr1和arr2只有一个ItemNumber为2001的项,ItemNumber为2002。
但是,arr3有两个项目编号
<> P>当创建结果数组时,将重复考虑单个项的数组,以考虑多个数组的其他项。
因此,生成的数组如下所示
var resultingArray = [
{ 'IM_Id': 1, 'IM_Name': 'Hello', 'FE_Id': 2, 'FE_Name': 'Wall', 'Code': 'XYZ',
'FC_Id': 2, 'FC_Name': 'ABC', 'Value': 009 },
{ 'IM_Id': 1, 'IM_Name': 'Hello', 'FE_Id': 2, 'FE_Name': 'Wall', 'Code': 'XYZ',
'FC_Id': 3, 'FC_Name': 'PQR', 'Value': 007 },
{ 'IM_Id': 2, 'IM_Name': 'World', 'FE_Id': 3, 'FE_Name': 'WallMart', 'Code': '009F',
'FC_Id': 4, 'FC_Name': 'ABCD', 'Value': 004 },
{ 'IM_Id': 2, 'IM_Name': 'World', 'FE_Id': 3, 'FE_Name': 'WallMart', 'Code': '009F',
'FC_Id': 5, 'FC_Name': 'PQRS', 'Value': 002 }
];
您可以看到,对于Ar3的匹配元素,fcID ID=2,fcID ID=3,对于ItMeNo 2001,得到的数组重复了ARR1和ARR2的项目,但使用了不同的ARR3项。 我尝试了以下代码,但它只给了我一个类似ItemNumber的项目
一个ItemNumber
也可能有多个项目
function joinObjects() {
var idMap = {}, key, property;
// Iterate over arguments
for (var i = 0; i < arguments.length; i++) {
// Iterate over individual argument arrays (aka json1, json2)
for (var j = 0; j < arguments[i].length; j++) {
var currentID = arguments[i][j]['ItemMasterNumber'];
if (!idMap[currentID]) {
idMap[currentID] = {};
}
// Iterate over properties of objects in arrays (aka id, name, etc.)
for (key in arguments[i][j]) {
idMap[currentID][key] = arguments[i][j][key];
}
}
}
// Push properties of idMap into an array
var newArray = [];
for (property in idMap) {
newArray.push(idMap[property]);
}
return newArray;
}
var finalArray = joinObjects(arr1, arr2, arr3);
得到的数组应该是
var resultingArray = [
{'IM_Id': 1, 'IM_Name': 'Hello', 'FE_Id': 2, 'FE_Name': 'Wall', 'Code': 'XYZ',
'FC_Id': 2, 'FC_Name': 'ABC', 'Value': 009,'OC_Id':6,'OC_Name':'Rai','OC_Price':'$30','CH_Id':4,'CH_Name':'Sen','CH_Code':'LMN',
'CO_Id':5,'CO_Name':'xyz','CO_Value':'qqq'
},
{'IM_Id': 1, 'IM_Name': 'Hello', 'FE_Id': 2, 'FE_Name': 'Wall', 'Code': 'XYZ',
'FC_Id': 3, 'FC_Name': 'PQR', 'Value': 007,'OC_Id':6,'OC_Name':'Rai','OC_Price':'$30','CH_Id':4,'CH_Name':'Sen','CH_Code':'LMN',
'CO_Id':9,'CO_Name':'pqr','CO_Code':'LMN'
},
{'IM_Id': 2, 'IM_Name': 'World', 'FE_Id': 3, 'FE_Name': 'WallMart', 'Code': '009F',
'FC_Id': 4, 'FC_Name': 'ABCD', 'Value': 004,'OC_Id': 7,'OC_Name':'Raj','OC_Price':'$60','CH_Id':7,'CH_Name':'Ken','CH_Code':'IJK',
'CO_Id':"-",'CO_Name':'-','CO_Code':'-'
},
{'IM_Id': 2, 'IM_Name': 'World', 'FE_Id': 3, 'FE_Name': 'WallMart', 'Code': '009F',
'FC_Id': 5, 'FC_Name': 'PQRS', 'Value': 002,'OC_Id': 7,'OC_Name':'Raj','OC_Price':'$60','CH_Id':7,'CH_Name':'Ken','CH_Code':'IJK',
'CO_Id':"-",'CO_Name':'-','CO_Code':'-'
}
此外,注释arr6有两个项目,都具有相同的项目编号2001,并且项目编号2002没有任何元素
在这种情况下,它在最后两个元素的结果数组中取一个空或一个“-”。我创建了一个名为
joinArrays()
的函数,它接受无限参数,其中每个参数都是数组
此函数循环遍历其参数。如果结果数组中不存在带有ItemNumber
的汽车,我们将在结果数组中创建一个空对象。所有汽车详细信息都将添加到此新对象
在某些情况下,您的汽车详细信息对同一ItemNumber具有多个值。在本例中,我刚刚创建了一个包含所有这些内容的数组,因为问题中没有指定这些内容
var arr1=[
{'IM_Id':1,'IM_Name':'Hello','ItemNumber':2001},
{'IM_Id':2,'IM_Name':'World','ItemNumber':2002}
];
var arr2=[
{'FE_Id':2,'FE_Name':'Wall','Code':'XYZ','ItemNumber':2001},
{'FE_Id':3,'FE_Name':'WallMart','Code':'009F','ItemNumber':2002}
];
var arr3=[
{'FC_Id':2,'FC_Name':'ABC','Value':009,'ItemNumber':2001},
{'FC_Id':3,'FC_Name':'PQR','Value':007,'ItemNumber':2001},
{'FC_Id':4,'FC_Name':'ABCD','Value':004,'ItemNumber':2002},
{'FC_Id':5,'FC_Name':'PQRS','Value':002,'ItemNumber':2002}
];
log(joinArrays(arr1、arr2、arr3));
函数joinArrays(){
var resultingArray=[],
itemNumbersAdded=[];
for(var i=0;i }
您需要一个双嵌套循环来将源数组项映射到目标项
var arr1=[
{'IM_Id':1,'IM_Name':'Hello','ItemNumber':2001},
{'IM_Id':2,'IM_Name':'World','ItemNumber':2002}
];
var arr2=[
{'FE_Id':2,'FE_Name':'Wall','Code':'XYZ','ItemNumber':2001},
{'FE_Id':3,'FE_Name':'WallMart','Code':'009F','ItemNumber':2002}
];
var arr3=[
{'FC_Id':2,'FC_Name':'ABC','Value':009,'ItemNumber':2001},
{'FC_Id':3,'FC_Name':'PQR','Value':007,'ItemNumber':2001},
{'FC_Id':4,'FC_Name':'ABCD','Value':004,'ItemNumber':2002},
{'FC_Id':5,'FC_Name':'PQRS','Value':002,'ItemNumber':2002}
];
var arr4=[
{'OC_Id':6,'OC_Name':'Rai','OC_Price':'$30','ItemNumber':2001},
{'OC_Id':7,'OC_Name':'Raj','OC_Price':'60','ItemNumber':2002}
];
var arr5=[
{'Chu-Id':4,'Chu-Name':'Sen','Chu-Code':'LMN','ItemNumber':2001},
{'Chu-Id':7,'Chu-Name':'Ken','Chu-Code':'IJK','ItemNumber':2002}
];
var arr6=[
{'CO_Id':5,'CO_Name':'xyz','CO_Value':'qqq','ItemNumber':2001},
{'CO_Id':9,'CO_Name':'pqr','CO_Code':'LMN','ItemNumber':2001}
];
var arr7=合并(arr3,'ItemNumber',[arr1,arr2,arr4,arr5,arr6]);
log(JSON.stringify(arr7,null,2));
函数合并(目标、属性、srcArr){
返回target.map(项=>{
srcArr.forEach(arr=>{
arr.forEach(src=>{
如果(src[prop]==项目[prop]){
Object.keys(src.forEach)(key=>item[key]=src[key])
}
})
})
退货项目;
});
}
.as控制台包装{top:0;最大高度:100%!important;}
您可以使用Object.assign:
var arr1=[{'IM_Id':1,'IM_Name':'Hello','ItemNumber':2001},{'IM_Id':2,'IM_Name':'World','ItemNumber':2002}];
var arr2=[{'FE_Id':2,'FE_Name':'Wall','Code':'XYZ','ItemNumber':2001},{'FE_Id':3,'FE_Name':'WallMart','Code':'009F','ItemNumber':2002}];
var arr3=[{'FC_Id':2,'FC_Name':'ABC','Value':009,'ItemNumber':2001},
{'FC_Id':3,'FC_Name':'PQR','Value':007,
var resultingArray = [
{'IM_Id': 1, 'IM_Name': 'Hello', 'FE_Id': 2, 'FE_Name': 'Wall', 'Code': 'XYZ',
'FC_Id': 2, 'FC_Name': 'ABC', 'Value': 009,'OC_Id':6,'OC_Name':'Rai','OC_Price':'$30','CH_Id':4,'CH_Name':'Sen','CH_Code':'LMN',
'CO_Id':5,'CO_Name':'xyz','CO_Value':'qqq'
},
{'IM_Id': 1, 'IM_Name': 'Hello', 'FE_Id': 2, 'FE_Name': 'Wall', 'Code': 'XYZ',
'FC_Id': 3, 'FC_Name': 'PQR', 'Value': 007,'OC_Id':6,'OC_Name':'Rai','OC_Price':'$30','CH_Id':4,'CH_Name':'Sen','CH_Code':'LMN',
'CO_Id':9,'CO_Name':'pqr','CO_Code':'LMN'
},
{'IM_Id': 2, 'IM_Name': 'World', 'FE_Id': 3, 'FE_Name': 'WallMart', 'Code': '009F',
'FC_Id': 4, 'FC_Name': 'ABCD', 'Value': 004,'OC_Id': 7,'OC_Name':'Raj','OC_Price':'$60','CH_Id':7,'CH_Name':'Ken','CH_Code':'IJK',
'CO_Id':"-",'CO_Name':'-','CO_Code':'-'
},
{'IM_Id': 2, 'IM_Name': 'World', 'FE_Id': 3, 'FE_Name': 'WallMart', 'Code': '009F',
'FC_Id': 5, 'FC_Name': 'PQRS', 'Value': 002,'OC_Id': 7,'OC_Name':'Raj','OC_Price':'$60','CH_Id':7,'CH_Name':'Ken','CH_Code':'IJK',
'CO_Id':"-",'CO_Name':'-','CO_Code':'-'
}