Javascript-array søk og fjern streng?


Jeg har:

var array = new Array();
array.push("A");
array.push("B");
array.push("C");

Jeg vil kunne gjøre noe som:

array.remove("B");

men det finnes ingen fjern-funksjon. Hvordan gjør jeg dette?

Svar #1

Jeg oppdaterer faktisk denne tråden med en mer nylig énløsningsløsning:

let arr = ['A', 'B', 'C'];
arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']

Ideen er i utgangspunktet å filtrere arrayet ved å velge alle elementer som er forskjellige fra elementet du vil fjerne.

Med andre ord, i eksemplet ovenfor:

"Hvis e (elementet i arrayet) ikke er lik B, behold det i det nye arrayet"

Merk: vil fjerne alle forekomster.

Se :

MDN Web Docs - Array.prototype.filter()

REDIGER :

Hvis du vil fjerne bare den første forekomsten:

t = ['A', 'B', 'C', 'B'];
t.splice(t.indexOf('B'), 1); // will return ['B'] and t is now equal to ['A', 'C', 'B']

Svar #2

Gå gjennom listen i omvendt rekkefølge, og bruk .splice-metoden.

var array = ['A', 'B', 'C']; // Test
var search_term = 'B';

for (var i=array.length-1; i>=0; i--) {
    if (array[i] === search_term) {
        array.splice(i, 1);
        // break;       //<-- Uncomment  if only the first term has to be removed
    }
}

Omvendt rekkefølge er viktig når alle forekomster av søketermen må fjernes. Ellers vil telleren øke, og du vil hoppe over elementer.

Når bare den første forekomsten må fjernes, vil følgende også fungere:

var index = array.indexOf(search_term);    // <-- Not supported in <IE9
if (index !== -1) {
    array.splice(index, 1);
}

Svar #3

Liste over vitser på én linje

La oss løse dette problemet for dette arrayet:

var array = ['A', 'B', 'C'];

1. Fjern bare den første: Bruk hvis du er sikker på at elementet finnes

array.splice(array.indexOf('B'), 1);

2. Fjern bare den siste: Bruk hvis du er sikker på at elementet finnes

array.splice(array.lastIndexOf('B'), 1);

3. Fjern alle forekomster:

array = array.filter(v => v !== 'B'); 

Svar #4

DEMO

Du må finne plasseringen til det du leter etter med .indexOf(), og deretter fjerne det med .splice()

function remove(arr, what) {
    var found = arr.indexOf(what);

    while (found !== -1) {
        arr.splice(found, 1);
        found = arr.indexOf(what);
    }
}

var array = new Array();
array.push("A");
array.push("B");
array.push("C");
    
remove(array, 'B');
alert(array);

Dette vil ta seg av alle forekomster.

Svar #5

Enkelt

array.splice(array.indexOf(item), 1);

Relaterte artikler