Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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_Jquery_Arrays - Fatal编程技术网

Javascript 基于密钥的组合数组

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'

我将有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': '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':'-'

                }