2
votes

Comment grouper par deux tableau par index en javascript avec es6 ou lodash?

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.


1 commentaires

Ce que vous demandez est généralement appelé zip , donc si lodash a une fonction zip, utilisez-la.


3 Réponses :


7
votes

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);


0 commentaires

3
votes

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;
}


0 commentaires

0
votes

Le code suivant fonctionne sous ces hypothèses:

  1. tous les tableaux d'entrée ont la même longueur
  2. si l'élément du tableau est un objet, il n'a qu'une seule propriété
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)


0 commentaires