Nous avons les deux mêmes tableaux à regrouper par thème par index. Deux tableaux de même longueur et de valeur différente comme coup. Comment grouper deux tableaux avec leur index par ES6 Reduce ou Lodash?
array1 = [1,2,3,4] OR [{a:1},{b:2},{c:3},{d:4}] array2 = [5,6,7,8] OR [{e:5},{f:6},{g:7},{h:8}] finalArray = [[1,5],[2,6],[3,7],[4,8]]
J'essaie de différentes manières, comme group by with reduction dans es6 ou lodash concat, mais je ne trouve pas la meilleure solution pour mes problèmes.
3 Réponses :
Essayez ceci:
let array1 = [{a:1},{b:2},{c:3},{d:4}]; let array2 = [{e:5},{f:6},{g:7},{h:8}]; let res = array1.map((value, index) => { return [Object.values(value)[0],Object.values(array2[index])[0]] }) console.log(res)
S'il s'agit d'un tableau d ' objets
let array1 = [1, 2, 3, 4]; let array2 = [5, 6, 7, 8]; let res = array1.map((value, index) => { return [value, array2[index]] }) console.log(res);
Utilisez la fonction lodash
es zip
function zip(a, b) { const num = Math.min(a.length, b.length); const result = []; for(i = 0; i < num; i++) result.push([a[i], b[i]]); return result; }
Le code suivant fonctionne sous ces hypothèses:
function getValue(element) { if (typeof element === 'object') { return Object.values(element).pop() } else { return element } } function zipArrays(arr1, arr2) { return arr1.reduce((acc, elm1, index) => { const elm2 = arr2[index] const elm = [getValue(elm1), getValue(elm2)] acc.push(elm) return acc }, []) } // usage: const array1 = [1,2,3,4] // OR [{a:1},{b:2},{c:3},{d:4}] const array2 = [5,6,7,8] // OR [{e:5},{f:6},{g:7},{h:8}] const finalArray = zipArrays(array1, array2)
Ce que vous demandez est généralement appelé
zip
, donc si lodash a une fonction zip, utilisez-la.