Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

217
Vistas
Obtenga un valor único basado en varias columnas de una hoja de cálculo con Google Apps Script y JavaScript

Entonces, básicamente, lo que quiero es obtener datos únicos de una matriz 2d donde puedo pasar múltiples valores de columna que he almacenado en una matriz. Como quiero ser único en función de las columnas 1 y 2, puedo pasar el valor de la columna como una matriz [0, 1] a la función y, según la matriz de columnas, debería devolver un valor único.

He intentado algo como esto:

 function sortFunction(a, b) { if (a[0] === b[0]) { // 0 for column one return 0; } else { return (a[0] < b[0]) ? -1 : 1; } } function getUniqueData_(arr) { arr = arr.sort(sortFunction) let prevEl; const newArr = arr.reduce((prevArr, currentVal) => { const idx = prevArr.findIndex(val => val[0] === currentVal[0]); if (idx === -1) { if (prevEl && prevEl[0] !== currentVal[0]) { prevArr.push(currentVal); } } else { prevArr.splice(idx, 1); } prevEl = currentVal; return prevArr; }, []) console.log(newArr); return newArr; }

En lugar de pasar el valor de la columna manualmente, quiero pasarlo dinámicamente y varias columnas al mismo tiempo que lo he almacenado en una matriz como [0,1] para la columna 1 y 2.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Solución:

  • Use el filtro para eliminar los elementos no deseados de su matriz.
  • Para cada fila, use el mapa para obtener la combinación de valores relacionados con las columnas que desea verificar, de modo que si existe otra fila con esta combinación, ambas filas deben filtrarse.
  • Para cada fila, use algunos para verificar si hay otra fila con esta misma combinación.
  • Usa cada para comparar ambas combinaciones y comprobar que son iguales.

Ejemplo de código:

 function getUniqueData(arr = [[1, 2, 3],[1, 2, 2],[1, 2, 3],[2, 1, 3]], uniqueCols = [0]) { const uniqueData = arr.filter((currentRow,i) => { const currentCombo = uniqueCols.map(index => currentRow[index]); return !arr.some((row,j) => { const combo = uniqueCols.map(index => row[index]); return combo.every((c1,k) => c1 === currentCombo[k]) && i !== j; }); }); return uniqueData; }

Nota:

En el ejemplo anterior, agregué el ejemplo que proporcionó en los comentarios data = [[1, 2, 3],[1, 2, 2],[1, 2, 3],[2, 1, 3]] and I want to check unique in column 1 como parámetros predeterminados . En este caso, el uniqueData devuelto es [2, 1, 3] , como se esperaba.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Prueba este código:

 function sortData(){ //change data and column index according to requirements var columns = [0,2] //0 for column 1 var data = [[1,2,3],[1,2,2],[1,2,3]] var temp_arr = []; var unique_arr = []; // for output var specific_columns_data = getSpecificColumnsData(data, columns) // this function return array according to columns. eg [[1,3],[1,2],[1,3]] for(var i=0;i<specific_columns_data.length;i++){ if(specific_columns_data[i].join("")!==""){ if(temp_arr.indexOf(specific_columns_data[i].join(""))==-1){ unique_arr.push(data[i]); } temp_arr.push(specific_columns_data[i].join("")) } } Logger.log(unique_arr) } function getSpecificColumnsData(data, columns){ var specific_columns_data = [] var temp_arr = [] for(var i=0;i<data.length;i++){ temp_arr = [] for(var j = 0;j<columns.length;j++){ if(data[i][j]){ temp_arr.push(data[i][columns[j]]) } } specific_columns_data.push([temp_arr]) } return specific_columns_data; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Por si acaso, aquí está mi variante del código. Puede filtrar una matriz 2D por cualquier número de sus columnas en cualquier secuencia dada:

 var data = [ [1, 2, 3, 4], [1, 2, 2, 4], [2, 1, 3, 4], [3, 1, 2, 4], [4, 3, 3, 4], [5, 2, 5, 1], ] function getUniqueData(data, columns) { let arr = data.slice(); columns.forEach(c => { let col = arr.map(x => x[c]); arr = arr.filter(x => col.indexOf(x[c]) == col.lastIndexOf(x[c])); }); return arr; } // get unique rows by column 1 console.log(getUniqueData(data, [0])); // get unique rows by column 1 and then by column 2 console.log(getUniqueData(data, [0,1])); // get unique rows by column 1 and then by column 3 console.log(getUniqueData(data, [0,2])); // get unique rows by column 1 and then by column 4 console.log(getUniqueData(data, [0,3])); // get unique rows by column 3 console.log(getUniqueData(data, [2])); // get unique rows by column 4 console.log(getUniqueData(data, [3])); // get unique rows by column 2, then by column 3, then by column 4 console.log(getUniqueData(data, [1,2,3])); // etc

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda