javascript array methods - Come rimuovere l'elemento dalla matrice in base al valore?





15 Answers

Puoi usare il metodo indexOf questo modo:

var index = array.indexOf(item);
if (index !== -1) array.splice(index, 1);

Nota : dovrai shimarlo per IE8 e sotto

var array = [1,2,3,4]
var item = 3

var index = array.indexOf(item);
if (index !== -1) array.splice(index, 1);

console.log(array)

push multidimensional length

Esiste un metodo per rimuovere un elemento da un array JavaScript?

Dato un array:

var ary = ['three', 'seven', 'eleven'];

Mi piacerebbe fare qualcosa come:

removeItem('seven', ary);

Ho esaminato splice() ma questo rimuove solo dal numero di posizione, mentre ho bisogno di qualcosa per rimuovere un oggetto dal suo valore.




Puoi usare underscore.js . Rende davvero le cose semplici.

Ad esempio, con questo:

var result = _.without(['three','seven','eleven'], 'seven');

E il result sarà ['three','eleven'] .

Nel tuo caso il codice che dovrai scrivere è:

ary = _.without(ary, 'seven')

Riduce il codice che scrivi.




Ecco una versione che utilizza la funzione inArray di jQuery:

var index = $.inArray(item, array);
if (index != -1) {
    array.splice(index, 1);
}



Puoi farlo con questi due modi:

var arr = ["1","2","3","4"] // we wanna delete number "3"

primo:

arr.indexOf('3') !== -1 && arr.splice(arr.indexOf('3'), 1)

secondo (ES6):

arr = arr.filter(e => e !== '3')



Visto che non ce n'è uno carino, ecco una funzione ES6 semplice e riutilizzabile.

const removeArrayItem = (arr, itemToRemove) => {
  return arr.filter(item => item !== itemToRemove)
}

Uso:

const items = ['orange', 'purple', 'orange', 'brown', 'red', 'orange']
removeArrayItem(items, 'orange')



Rimuovendo tutti gli elementi corrispondenti dall'array (piuttosto che solo il primo come sembra essere la risposta più comune qui):

while ($.inArray(item, array) > -1) {
    array.splice( $.inArray(item, array), 1 );
}

Ho usato jQuery per il sollevamento pesi, ma ti viene l'idea se vuoi diventare nativo.




Davvero, non vedo perché questo non può essere risolto

arr = arr.filter(value => value !== 'seven');

O forse vuoi usare vanilla JS

arr = arr.filter(function(value) { return value !== 'seven' });



Il trucco è passare attraverso l'array dall'inizio alla fine, in modo da non rovinare gli indici durante la rimozione degli elementi.

var deleteMe = function( arr, me ){
   var i = arr.length;
   while( i-- ) if(arr[i] === me ) arr.splice(i,1);
}

var arr = ["orange","red","black", "orange", "white" , "orange" ];

deleteMe( arr , "orange");

arr è ora ["rosso", "nero", "bianco"]




Rimozione non distruttiva:

function removeArrayValue(array, value)
{
    var thisArray = array.slice(0); // copy the array so method is non-destructive

    var idx = thisArray.indexOf(value); // initialise idx

    while(idx != -1)
    {
        thisArray.splice(idx, 1); // chop out element at idx

        idx = thisArray.indexOf(value); // look for next ocurrence of 'value'
    }

    return thisArray;
}



Si prega di non utilizzare la variante con delete : crea un buco nell'array poiché non reindicizza gli elementi dopo l'elemento eliminato.

> Array.prototype.remove=function(v){
...     delete this[this.indexOf(v)]
... };
[Function]
> var myarray=["3","24","55","2"];
undefined
> myarray.remove("55");
undefined
> myarray
[ '3', '24', , '2' ]



function removeFrmArr(array, element) {
  return array.filter(e => e !== element);
};
var exampleArray = [1,2,3,4,5];
removeFrmArr(a, 3);
// return value like this
//[1, 2, 4, 5]



let arr = [5, 15, 25, 30, 35];
console.log(arr); //result [5, 15, 25, 30, 35]
let index = arr.indexOf(30);

if (index > -1) {
   arr.splice(index, 1);
}
console.log(arr); //result [5, 15, 25, 35]



Ho provato ad usare il metodo della funzione da jbaron sopra ma ho scoperto che avevo bisogno di mantenere intatto l'array originale per usarlo successivamente, e di creare un nuovo array come questo:

var newArray = referenceArray;

apparentemente crea per riferimento invece di valore perché quando ho rimosso un elemento da newArray anche il referenceArray lo ha rimosso. Così ho deciso di creare un nuovo array ogni volta in questo modo:

function newArrRemoveItem(array, item, newArray){
    for(var i = 0; i < array.length; i++) {
        if(array[i]!=item){
            newArray.push(array[i]);
        }
    }
}

Quindi lo uso in questo modo in un'altra funzione:

var vesselID = record.get('VesselID');
var otherVessels = new Array();
newArrRemoveItem(vesselArr,vesselID,otherVessels);

Ora il vasoArr rimane intatto mentre ogni volta che eseguo il codice sopra riportato l'array otherVessels include tutto tranne l'ultimo elemento vesselID.




//This function allows remove even array from array
var removeFromArr = function(arr, elem) { 
    var i, len = arr.length, new_arr = [],
    sort_fn = function (a, b) { return a - b; };
    for (i = 0; i < len; i += 1) {
        if (typeof elem === 'object' && typeof arr[i] === 'object') {
            if (arr[i].toString() === elem.toString()) {
                continue;
            } else {                    
                if (arr[i].sort(sort_fn).toString() === elem.sort(sort_fn).toString()) {
                    continue;
                }
            }
        }
        if (arr[i] !== elem) {
            new_arr.push(arr[i]);
        }
    }
    return new_arr;
}

Esempio di utilizzo

var arr = [1, '2', [1 , 1] , 'abc', 1, '1', 1];
removeFromArr(arr, 1);
//["2", [1, 1], "abc", "1"]

var arr = [[1, 2] , 2, 'a', [2, 1], [1, 1, 2]];
removeFromArr(arr, [1,2]);
//[2, "a", [1, 1, 2]]



// modificato grazie a MarcoCI per il consiglio

prova questo:

function wantDelete(item, arr){
  for (var i=0;i<arr.length;i++){
    if (arr[i]==item){
      arr.splice(i,1); //this delete from the "i" index in the array to the "1" length
      break;
    }
  }  
}
var goodGuys=wantDelete('bush', ['obama', 'bush', 'clinton']); //['obama', 'clinton']

spero che questo ti aiuti






Related