Quiero crear una nueva matriz a partir de una matriz antigua donde la longitud de cada elemento sea mayor que su elemento anterior. Tengo una matriz antigua como la siguiente:

Arr=[[2,3],[1,2],[2,4,5],[6,6,3],[3,2,1],[4,2,3],[4,2,1,2],[2,1,4,5]]

Ahora tengo que crear una nueva matriz como la siguiente desde la matriz anterior:

newArr = [[2,3],[2,4,5],[4,2,1,2]]

Usando Javascript.

0
Govind 25 jun. 2020 a las 09:42

3 respuestas

La mejor respuesta

Hacemos un bucle sobre toda la matriz y, si la longitud actual es menor que la siguiente, empujamos el elemento en el resultado y cambiamos la longitud actual

const findArray = () => {
  let currentLength = 0
  const result = []
  for (let i = 0; i < arr.length; i += 1) {
    if (arr[i].length > currentLength) {
      result.push(arr[i])
      currentLength = arr[i].length
    }
  }
  return result
}
2
AlexAV-dev 25 jun. 2020 a las 06:55

I wood aquí para demostrar este código con valor real (el resultado se imprime en la pantalla)

<!DOCTYPE html>
<html>
<body>

<p>Click the button to create an array, then display its length.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
function myFunction() {
   
  var Arr=[[2,3],[1,2],[2,4,5],[6,6,3],[3,2,1],[4,2,3],[4,2,1,2],[2,1,4,5]];
  
var text = ""; 
var len=0;
var i;
for (i = 0; i < Arr.length; i++) { 
 if (len < Arr[i].length )
  {text += Arr[i] + "<br>"; len=Arr[i].length;}
}
  
  document.getElementById("demo").innerHTML = text;


}
</script>

</body>
</html>

El resultado es:

2,3
2,4,5
4,2,1,2
1
AziMez 25 jun. 2020 a las 07:00

Puede cerrar la siguiente longitud deseada y filtrar la matriz marcando el índice o la longitud real. Si una de las dos condiciones es true, configure l en la siguiente longitud esperada.

const
    array = [[2, 3], [1, 2], [2, 4, 5], [6, 6, 3], [3, 2, 1], [4, 2, 3], [4, 2, 1, 2], [2, 1, 4, 5]],
    result = array.filter(
        (l => ({ length }) => (!l || l === length) && (l = length + 1))
        (0)
    );

console.log(result);
1
Nina Scholz 25 jun. 2020 a las 07:14