我正在尝试使用angular组合两个JSON对象并创建一个对象。不知何故,我能够做到这一点,但一个小故障无法找到可以做的...下面是两个JSON对象:
var array1 = [
{
"personId" : 7,
"batchNumber": 213,
"name": "Mike",
"company":"abc"
}];
var array2 = [
{
"batchNumber": 213,
"role": "engineer"
},
{
"batchNumber": 213,
"role": "architect"
}];
我希望得到的json是
var result = [
{
"personId" : 7,
"batchNumber": 213,
"name": "Mike",
"company":"abc",
"role": "engineer"
}
{
"personId" : 7,
"batchNumber": 213,
"name": "Mike",
"company":"abc",
"role": "architect"
}]
我只能创建一个json,然后循环终止/任何帮助都会感激提前感谢。
var array1 = [{
"personId" : 7,
"batchNumber": 213,
"name": "Mike",
"company":"abc"
}, {
"personId" : 8,
"batchNumber": 218,
"name": "julie",
"company":"tyu"
}];
var array2 = [{
"batchNumber": 213,
"role": "engineer"
},
{
"batchNumber": 213,
"role": "architect"
},{
"batchNumber": 218,
"role": "BSA"
},
{
"batchNumber": 218,
"role": "Manager"
}];
var newArray = [];
for (var i = 0; i < array1.length; i++) {
var obj = array1[i];
if (array2[i] && obj.box == array2[i]._id) {
for (key in array2[i]) {
obj[key] = array2[i][key];
}
newArray.push(obj);
}
};
console.log(newArray);
我也附上了JS小提琴:https://jsfiddle.net/n9pv4pL3/
我的控制器:
var array1 = [
{
"personId" : 7,
"batchNumber": 213,
"name": "Mike",
"company":"abc"
}];
var array2 = [
{
"batchNumber": 213,
"role": "engineer"
},
{
"batchNumber": 213,
"role": "architect"
}];
var newArray = [], i,key;
for (var i = 0; i < array2.length; i++) {
var obj = array2[i];
if (array1[i] && obj. INPT_FILE_ID == array1[i].INPT_FILE_ID) {
for (key in array1[i]) {
obj[key] = array1[i][key];
}
newArray.push(obj);
}
};
console.log(newArray);
答案 0 :(得分:0)
好的,如果你想在一个键下聚合所有角色,你可以用2个reduce函数来完成它,如下所示:
let workingArray = array1.reduce((prevVal, currVal, index) => {
let role = array2.reduce((rPrevVal, rCurrVal, idx) => {
if (currVal.batchNumber === rCurrVal.batchNumber) {
rPrevVal.push(rCurrVal.role);
}
return rPrevVal;
}, []);
prevVal.push({
...currVal,
role
});
return prevVal;
}, []);
console.log(workingArray);
可能不太复杂的解决方案,但我能说什么我喜欢减少功能:)在这里检查小提琴(在控制台中)我在第一个数组中添加了2个不同的对象,在第二个数组中添加了更多的对象:
答案 1 :(得分:0)
var array1 = [
{
"personId": 7,
"batchNumber": 213,
"name": "Mike",
"company": "abc"
}];
var array2 = [
{
"batchNumber": 213,
"role": "engineer"
},
{
"batchNumber": 213,
"role": "architect"
}];
var finalData = [];
array1.forEach(data => {
//filter batchwise data
var dataFromArray2 = array2.filter(arry2 => {
return arry2.batchNumber === data.batchNumber });
//pushing data in main array
dataFromArray2.forEach(batchData => {
finalData.push({
personId: data.personId,
batchNumber: batchData.batchNumber,
name: data.name,
company: data.company,
role: batchData.role
});
});
});
console.log(finalData)
&#13;
这里运行正常,请再次检查,我还为此添加了代码段 关于过滤方法 这是返回新过滤的数组。 在我们的例子中,它返回了包含array2所有属性的新数组 如果你想在deap中理解,那么请参考此链接 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter