Como estoy tratando de soltar los primeros 5 elementos en la matriz cuando el elemento de la matriz cruza más de 10. Como mi matriz sigue agregando los elementos en el método setInterval.

function checkArray(array,limit,toshow){
    var length =  array.length;
    if(length > limit){
        var  splicedArry =  _.drop(array1,toshow);
        array = splicedArry;
    }
    return array;
}

Compruebe el fiddle

1
fekky Dev 14 sep. 2018 a las 12:55

4 respuestas

La mejor respuesta

Aquí está el código de trabajo completo de su JSfiddle (usando Vanilla JS):

var arrayEl = [];
var count =0;

setInterval(function(){
  count = ++count;
  arrayEl.push(count);


},1000)

setInterval(function() {
  // modify array by reference
  checkArray(arrayEl,10,5)
  // print the contents of modified array
  console.log(arrayEl)
}, 1100)


function checkArray(array,limit,toshow){
  // splice takes 2 arguments to modify an array (people often confuse it with `slice`
  if (array.length > limit) array.splice(0, toshow);
}

Lodash _.drop crea una nueva matriz, por lo que el código de código completo se vería así:

var arrayEl = [];
var count =0;

setInterval(function(){
  count = ++count;
  arrayEl.push(count);


},1000)

setInterval(function() {
  // you must assign the returned value to your original array
  arrayEl = checkArray(arrayEl,10,5)
  console.log(arrayEl)
}, 1100)


function checkArray(array,limit,toshow){
  if (array.length > limit) return _.drop(array, toshow);

  return array;
}
1
Pavel Denisjuk 14 sep. 2018 a las 10:27

Si quieres seguir con lodash usa _.dropRight Por ejemplo

var arr = [1,2,3,4,5,6]

function checkArray(array,limit,toshow){
    var length =  array.length;
    if(length > limit){
        return _.dropRight(array,(length-toshow));

    }else{
        return array;
    }
}
console.log(checkArray(arr,3,3))
0
anshuVersatile 14 sep. 2018 a las 10:14

En lugar de usar el método lodash _.drop(), es mejor usar el método Array#splice() , toma como parámetros el índice del que se eliminará y la cantidad de elementos que se eliminarán.

Entonces en tu función lo llamarás así:

array.splice(0, toshow)

Por lo tanto, elimina los primeros toshow elementos de array, donde toshow es el número de elementos que se eliminarán.

Así es como debería ser su función:

function checkArray(array, limit, toshow) {
  if (array.length > limit) {
    array.splice(0, toshow);
  }
  return array;
}

Demostración:

Este es su código actualizado con la función correcta:

var arrayEl = [];
var count = 0;

setInterval(function() {
  count = ++count;
  arrayEl.push(count);


}, 1000)
setInterval(function() {


  console.log(checkArray(arrayEl, 10, 5))



}, 1100);

function checkArray(array, limit, toshow) {
  if (array.length > limit) {
    array.splice(0, toshow);
  }
  return array;
}
1
cнŝdk 14 sep. 2018 a las 10:13

Podrías usar vanilla js:

let checkArray = (array, limit, toShow) => {
  if (array.length > limit) array.splice(toShow);
}
3
Stefan Blamberg 14 sep. 2018 a las 10:04