JavaScript nativo – fondere due arrays di oggetti

Voglio fondere due arrays come:

arr1 = [ ['01/09',1], ['02/09',2], ['03/09',3], ['04/09',4] ]; arr2 = [ ['01/09',13], ['03/09',14], ['04/09',15], ['05/09',16] ]; 

Voglio una produzione come questa:

 res = [ ['01/09',1,13], ['02/09',2,0], ['03/09',3,14], ['04/09',4,15], ['05/09',0,16] ] 

Voglio veramente alcune soluzioni! Grazie

È ansible utilizzare un approccio combinato per creare l'arrays vuoto con i parametri adn iterate e creare una tabella hash per gli elementi corrispondenti. Quindi applica il valore.

 function merge(arrayss) { var hash = Object.create(null), merged = []; arrayss.forEach(function (a, i) { a.forEach(function (b) { if (!hash[b[0]]) { hash[b[0]] = Array.apply(null, { length: arrayss.length + 1 }).map(function () { return 0 }); hash[b[0]][0] = b[0]; merged.push(hash[b[0]]); } hash[b[0]][i + 1] = b[1]; }); }); return merged; } var arr1 = [['01/09', 1], ['02/09', 2], ['03/09', 3], ['04/09', 4]], arr2 = [['01/09', 13], ['03/09', 14], ['04/09', 15], ['05/09', 16]]; console.log(merge([arr1, arr2])); 
 .as-console-wrapper { max-height: 100% !importnt; top: 0; } 

È ansible utilizzare Array.find per cercare in arrays e quindi utilizzare Array.concat per unirli.

Array.find + arrays.concat

 var arr1 = [ ['01/09', 1], ['02/09', 2], ['03/09', 3], ['04/09', 4] ]; var arr2 = [ ['01/09', 13], ['03/09', 14], ['04/09', 15], ['05/09', 16] ]; var result = arr1.map(function(a1) { var _tmp = arr2.find(x => x[0] === a1[0]) || []; return a1.concat(_tmp.splice(1)); }); console.log(result) 
 var arr1 = [ ['01/09', 1], ['02/09', 2], ['03/09', 3], ['04/09', 4] ]; var arr2 = [ ['01/09', 13], ['03/09', 14], ['04/09', 15], ['05/09', 16] ]; var arr3 = [ ['01/09', 130], ['03/09', 140], ['04/09', 150], ['05/09', 160] ]; function mergeArrays() { var resultObj = {}, resultArray = []; var arrays = Array.prototype.concat.apply([], Array.prototype.slice.call(arguments)); arrays.map(function(item) { var key = item[0]; if (!this[key]) { this[key] = []; this[key].push(key); } this[key].push(item[1]); }, resultObj); for (var key in resultObj) { resultArray.push(resultObj[key]); } return resultArray; } console.log(mergeArrays(arr1, arr2, arr3)); 

Potresti farlo con la reduce() e per forEach()

 var arr1 = [ ['01/09', 1], ['02/09', 2], ['03/09', 3], ['04/09', 4] ]; var arr2 = [ ['01/09', 13], ['03/09', 14], ['04/09', 15], ['05/09', 16] ]; var obj = {} var result = arr1.reduce(function(r, e) { arr2.forEach(function(el, i) { if (!obj[e[0]]) { obj[e[0]] = [e[0], 0, 0]; r.push(obj[e[0]]); } obj[e[0]][1] = e[1]; if (el[0] == e[0]) { obj[e[0]][2] = el[1]; } else { if (!obj[el[0]]) { obj[el[0]] = [el[0], 0, el[1]]; r.push(obj[el[0]]); } } }) return r; }, []); console.log(result)