1

I have two arrays that i need to merge:

array 1:

[ { 'Issues in Version': 'PPW-1075', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1076', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1077', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1078', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1079', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1080', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1081', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1123', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1133', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1134', 'Issues In Progress': '' } ]

array 2:

 [{ 'Issues In Version': '', 'Issues In Progress': 'PPW-1123' },
  { 'Issues In Version': '', 'Issues In Progress': 'PPW-1133' },
  { 'Issues In Version': '', 'Issues In Progress': 'PPW-1134' } ]

How do i merge these arrays to give the following:

[ { 'Issues in Version': 'PPW-1075', 'Issues In Progress': 'PPW-1123' },
  { 'Issues in Version': 'PPW-1076', 'Issues In Progress': 'PPW-1133' },
  { 'Issues in Version': 'PPW-1077', 'Issues In Progress': 'PPW-1134' },
  { 'Issues in Version': 'PPW-1078', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1079', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1080', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1081', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1123', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1133', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1134', 'Issues In Progress': '' } ]
Dimitar Christoff
  • 26,147
  • 8
  • 50
  • 69

3 Answers3

1

Yocu could generate a new array with checking if the properties have a truthy value for matching properties.

var array1 =[ { 'Issues In Version': 'PPW-1075', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1076', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1077', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1078', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1079', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1080', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1081', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1123', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1133', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1134', 'Issues In Progress': '' } ],
    array2 = [{ 'Issues In Version': '', 'Issues In Progress': 'PPW-1123' }, { 'Issues In Version': '', 'Issues In Progress': 'PPW-1133' }, { 'Issues In Version': '', 'Issues In Progress': 'PPW-1134' } ],
    result = array1.map((o, i) => ({
        'Issues In Version': o['Issues In Version'] || ((array2[i] || {})['Issues In Version']) || '',
        'Issues In Progress': o['Issues In Progress'] || ((array2[i] || {})['Issues In Progress']) || ''
    }));
  
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Solution for any length arrays.

var array1 =[ { 'Issues In Version': 'PPW-1075', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1076', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1077', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1078', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1079', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1080', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1081', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1123', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1133', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1134', 'Issues In Progress': '' } ],
    array2 = [{ 'Issues In Version': '', 'Issues In Progress': 'PPW-1123' }, { 'Issues In Version': '', 'Issues In Progress': 'PPW-1133' }, { 'Issues In Version': '', 'Issues In Progress': 'PPW-1134' } ],
    result = [array1, array2].reduce((r, a) => (a.forEach((o, i) => {
        r[i] = r[i] || {};
        Object.keys(o).forEach(k => r[i][k] = r[i][k] || o[k] || '');
    }), r), []);

  
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
0

if you would like to keep the same array and just want to append new properties

var array1 = [{ 'Issues In Version': 'PPW-1075', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1076', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1077', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1078', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1079', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1080', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1081', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1123', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1133', 'Issues In Progress': '' }, { 'Issues In Version': 'PPW-1134', 'Issues In Progress': '' } ]
var array2 = [{ 'Issues in Version': '', 'Issues In Progress': 'PPW-1123' }, { 'Issues In Version': '', 'Issues In Progress': 'PPW-1133' }, { 'Issues In Version': '', 'Issues In Progress': 'PPW-1134' } ]

for (let i = 0, l = array2.length; i < l; i++) {
  array1[i]['Issues In Progress'] = array2[i]['Issues In Progress']
}

console.log(array1)
Endless
  • 34,080
  • 13
  • 108
  • 131
0

What about this?

const first = [
  { 'Issues in Version': 'PPW-1075', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1076', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1077', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1078', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1079', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1080', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1081', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1123', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1133', 'Issues In Progress': '' },
  { 'Issues in Version': 'PPW-1134', 'Issues In Progress': '' }
];

const second = [
  { 'Issues In Version': '', 'Issues In Progress': 'PPW-1123' },
  { 'Issues In Version': '', 'Issues In Progress': 'PPW-1133' },
  { 'Issues In Version': '', 'Issues In Progress': 'PPW-1134' }
];

const merged = new Array(Math.max(first.length, second.length))
  .fill(null)
  .map((item, index) => ({
    'Issues in Version': index < first.length ? first[index]['Issues in Version'] : '',
    'Issues in Progress': index < second.length ? second[index]['Issues In Progress'] : ''
  }));

English Explanation

  1. You create an array of length n, where n is the maximum of the 2 arrays' length. This is necessary, provided you cannot guarantee that the 1st array's length is equal or greater than the 2nd.

  2. You fill the array with a placeholder value (null in this case) to be able to iterate over it.

  3. You map the placeholder array to an array of the desired objects using each iteration's index i to take Issues in Version's value from the i-th item of the 1st array and Issues In Progress's value from the i-th item of the 2nd array. The ternary operator makes sure that in case the index exceeds the length of one the arrays, an empty string is used instead.