JavaScript Eliminarea elementelor dintr-o matrice. Cum să eliminați un anumit element de matrice JavaScript? Javascript elimină elementul de matrice după index

schimbare

Utilizați .shift pentru a elimina primul element al unui tablou.

De exemplu:

Var matrice = ; array.shift();

matricea are ca rezultat:

De exemplu:

Var matrice = ; array.pop();

matricea are ca rezultat:

Ambele metode returnează elementul eliminat;

lipitură

Utilizați .splice() pentru a elimina o serie de elemente dintr-o matrice. .splice() are doi parametri, un index de pornire și un număr opțional de elemente de eliminat. Dacă al doilea parametru nu este .splice() va elimina toate elementele din indexul de pornire până la sfârșitul matricei.

De exemplu:

Var matrice = ; array.splice(1, 2);

lasă o matrice care conține:

array.splice() returnează este o nouă matrice care conține elementele eliminate. În exemplul de mai sus, returnarea ar fi:

Deci, omiterea celui de-al doilea parametru împarte efectiv matricea în două matrice cu sfârșitul original la indexul specificat:

Var array = ; array.splice(2);

Lasă matricea care conține și returnează .

şterge

Utilizați delete pentru a elimina un element dintr-o matrice fără a modifica lungimea matricei:

Var matrice = ; console.log(array.length); // 5 șterge matrice; console.log(matrice); // console.log(array.length); // 5

Array.prototip.lungime

Atribuirea unei valori lungimea matricei modifică lungimea la valoarea specificată. Dacă noua valoare este mai mică decât lungimea matricei, elementele vor fi eliminate de la sfârșitul valorii.

Matrice = ; matrice.lungime = 2; console.log(matrice); //

Operatorul de ștergere JavaScript elimină o proprietate dintr-un obiect; dacă nu mai sunt deținute referințe la aceeași proprietate, aceasta este în cele din urmă eliberată automat.

Sursa pentru acest exemplu interactiv este stocată într-un depozit GitHub. Dacă doriți să contribui la proiectul de exemple interactive, clonează https://github.com/mdn/interactive-examples și trimite-ne o cerere de extragere.

Ștergere sintaxă expresie

Orice variabilă definită cu var este marcată ca neconfigurabilă. În următoarele de exemplu, salariul este neconfigurabil și nu poate fi șters. În modul non-strict, operația de ștergere va returna false .

Funcția Angajat() ( șterge salariul; salariu var; ) Angajat();

Să vedem cum se comportă același cod în modul strict În loc să returneze false , instrucțiunea generează o SyntaxError.

„utilizați strict”; function Employee() ( șterge salariul; // SyntaxError var salariu; ) // În mod similar, orice acces direct la o funcție // cu ștergere va genera o funcție SyntaxError DemoFunction() ( //un cod ) delete DemoFunction; // SyntaxError

Exemple // Creează proprietatea adminName pe domeniul global. adminName = "xyz"; // Creează proprietatea empCount pe domeniul global. // Deoarece folosim var, acesta este marcat ca neconfigurabil. Același lucru este valabil și pentru let și const. var empCount = 43; EmployeeDetails = (nume: „xyz”, vârsta: 5, denumire: „Developer”); // adminName este o proprietate a domeniului global. // Poate fi șters deoarece este creat fără var, // și, prin urmare, este configurabil. șterge adminName; // returnează true // Dimpotrivă, empCount nu este configurabil // deoarece a fost folosit var. șterge empCount; // returnează false // ștergerea poate fi folosită pentru a elimina proprietățile din obiecte. șterge EmployeeDetails.name; // returnează adevărat // Chiar și atunci când proprietatea nu există, șterge returnează "adevărat". șterge EmployeeDetails.salary; // returnează adevărat // ștergerea nu afectează proprietățile statice încorporate. șterge Math.PI; // returnează false // EmployeeDetails este o proprietate a domeniului global. // Deoarece a fost definit fără „var”, este marcat configurabil. ștergeți EmployeeDetails; // returnează funcția adevărată f() ( var z = 44; // ștergerea nu afectează numele variabilelor locale șterge z; // returnează false ) șterge și lanțul prototip

În exemplul următor, ștergem o proprietate proprie a unui obiect în timp ce o proprietate cu același nume este disponibilă pe lanțul de prototipuri:

Funcția Foo() ( this.bar = 10; ) Foo.prototype.bar = 42; var foo = new Foo(); // foo.bar este asociat cu // proprietatea proprie. console.log(foo.bar); // 10 // Șterge proprietatea proprie din // obiectul foo. șterge foo.bar; // returnează adevărat // foo.bar este încă disponibil în // lanțul de prototipuri. console.log(foo.bar); // 42 // Ștergeți proprietatea de pe prototip. ștergeți Foo.prototype.bar; // returnează true // Proprietatea „bar” nu mai poate fi // moștenită de la Foo deoarece a fost // ștearsă. console.log(foo.bar); // nedefinit

Ștergerea elementelor matricei

Când ștergeți un element de matrice, lungimea matricei nu este afectată. Acest lucru este valabil chiar dacă ștergeți ultimul element al matricei.

Când operatorul de ștergere elimină un element de matrice, acel element nu mai este în matrice. În exemplul următor, copacii sunt eliminați cu delete .

Arbori de var = [„redwood”, „dafin”, „cedru”, „stejar”, ​​„arțar”]; ștergeți copaci; if (3 în arbori) ( // aceasta nu este executată )

Dacă doriți ca un element de matrice să existe, dar să aibă o valoare nedefinită, utilizați valoare nedefinită în locul operatorului de ștergere. În exemplul următor, arborilor i se atribuie valoarea nedefinită, dar elementul matrice încă există:

Arbori de var = [„redwood”, „dafin”, „cedru”, „stejar”, ​​„arțar”]; arbori = nedefinit; if (3 în arbori) ( // acesta este executat )

Dacă, în schimb, doriți să eliminați un element de matrice prin modificarea conținutului matricei, utilizați metoda splice. În exemplul următor, copacii sunt eliminați complet din matrice folosind splice:

Arbori de var = [„redwood”, „dafin”, „cedru”, „stejar”, ​​„arțar”]; copaci.splice(3,1); console.log(arbori); // ["redwood", "dafin", "cedru", "arțar"]

Specificații Comentariu privind starea specificațiilor
Ultima versiune ECMAScript (ECMA-262)
Proiect
ECMAScript 2015 (ediția a 6-a, ECMA-262)
Definiția „Operatorul de ștergere” din specificația respectivă.
Standard
ECMAScript 5.1 (ECMA-262)
Definiția „Operatorul de ștergere” din specificația respectivă.
Standard
ECMAScript prima ediție (ECMA-262)
Definiția „Operatorul de ștergere” din specificația respectivă.
Standard Definiție inițială. Implementat în JavaScript 1.2.
Compatibilitate browser

Tabelul de compatibilitate de pe această pagină este generat din date structurate. Dacă doriți să contribuiți la date, vă rugăm să consultați https://github.com/mdn/browser-compat-data și să ne trimiteți o cerere de extragere.

Actualizați datele de compatibilitate pe GitHub

Desktop Mobile Server Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome pentru Android Firefox pentru Android Opera pentru Android Safari pe iOS Samsung Internet Node.jsşterge
Suport complet Chrome 1Edge Suport complet 12Suport complet pentru Firefox 1IE Suport complet 4Opera Suport complet DaSafari Suport complet DaWebView Android Suport complet 1Chrome Android Suport complet 18Firefox Android Suport complet 4Opera Android Suport complet DaSafari iOS Suport complet DaSamsung Internet Android Suport complet 1.0nodejs Suport complet Da
Legendă Suport complet Suport complet Note pentru browsere încrucișate

Deși ECMAScript face ordinea de iterație a obiectelor dependentă de implementare, se poate părea că toate browserele majore acceptă o ordine de iterație bazată pe cea mai veche proprietate adăugată care vine prima (cel puțin pentru proprietățile care nu sunt de pe prototip). Cu toate acestea, în cazul Internet Explorer, atunci când se folosește ștergerea unei proprietăți, rezultă un comportament confuz, împiedicând alte browsere să folosească obiecte simple, cum ar fi literalele obiecte ca matrice asociative ordonate. În Explorer, în timp ce proprietatea valoare este într-adevăr setată la nedefinit, dacă mai târziu se adaugă o proprietate cu același nume, proprietatea va fi iterată în vechi poziție - nu la sfârșitul secvenței de iterație așa cum s-ar putea aștepta după ce ați șters proprietatea și apoi ați adăugat-o înapoi.



Cum se elimină un element dintr-o matrice după valoare?

(20)

// editat multumesc lui MarcoCI pentru sfat

incearca asta:

Funcția wantDelete(item, arr)( for (var i=0;i !(comment.Id === commentId));

Iată o versiune care folosește funcția inArray a jQuery:

Var index = $.inArray(articol, matrice); dacă (index != -1) ( array.splice(index, 1); )

Puteți realiza acest lucru folosind funcția Lodash _.remove.

var array = ["trei", "șapte", "unsprezece"]; var evens = _.remove(array, function(e) ( return e !== "șapte"; )); console.log(evens);

Const _ = require("lodash"); _.fără(, 2); // ->

Într-adevăr, nu înțeleg de ce nu se poate rezolva asta

Arr = arr.filter(valoare => valoare !== „șapte”);

Sau poate doriți să utilizați vanilla JS

Arr = arr.filter(funcție(valoare) (valoare de returnare !== „șapte” ));

O alta varianta:

Dacă (!Array.prototype.removeArr) ( Array.prototype.removeArr = function(arr) ( if(!Array.isArray(arr)) arr=;//să fim drăguți cu oamenii care pun o valoare non-matrice aici.. asta ar putea fi eu! var that = this if(arr.length)( var i=0; while(i-1)( that.splice(i,1); )else i++; ) ) return that; ) )

Acesta este din nou indexOf() în interiorul buclei, dar în ipoteza că matricea de șters este mică în raport cu matricea de șters; fiecare ștergere scurtează bucla while.

Acest lucru vă va permite să faceți următoarele:

Var ary = [„trei”, „șapte”, „unsprezece”]; var aryWithoutSeven = ary.filter(funcție(valoare) (​valoare de returnare != „șapte” )); console.log(aryWithoutSeven); // returnează ["trei", "unsprezece"]

Acest lucru a fost notat și în acest thread în altă parte: https://.com/a/20827100/293492

> Array.prototype.remove=function(v)(... șterge acest...);

> var myarray="3","24","55","2"]; undefined > myarray.remove("55"); undefined > myarray [ "3", "24", "2" ]

O căptușeală o va face,

Var ary = [„trei”, „șapte”, „unsprezece”]; // Eliminați elementul „șapte” din matrice var filteredAry = ary.filter(funcție(e) ( return e !== „șapte” )) //=> [„trei”, „unsprezece”] // În ECMA6 (săgeată sintaxa funcției): var filteredAry = ary.filter(e => e !== „șapte”)

Aceasta folosește funcția de filtru din JS. Este acceptat în IE9 și mai sus.

filter() apelează funcția de returnare furnizată o dată pentru fiecare element din matrice și creează o nouă matrice cu toate valorile pentru care apelarea returnează o valoare care se evaluează la adevărat. callback este apelat numai pentru indicii de matrice care au valori atribuite; nu este apelat pentru indecși care au fost abandonați sau cărora nu li s-au atribuit niciodată valori. Elementele matricei care eșuează testul de apel invers sunt pur și simplu ignorate și nu sunt incluse în noua matrice.

Deci, practic, este la fel ca toate celelalte soluții pentru (cheia var în ary) ( ... ), cu excepția faptului că pentru in este acceptat ca IE6.

Practic, un filtru este o metodă convenabilă care arată mult mai frumos (și poate fi înlănțuită) spre deosebire de un constructor for in (AFAIK).

Verificați asta:

Pentru(var i în matrice)( if(array[i]=="șapte")( array.splice(i,1); break; ) )

si in functie:

Funcția removeItem(array, item)( for(var i in array)( if(array[i]==item)( array.splice(i,1); break; ) ) ) removeItem(array, "șapte");

Eliminarea tuturor elementelor care se potrivesc dintr-o matrice (nu doar primul, așa cum pare să fie cel mai general răspuns aici):

În timp ce ($.inArray(articol, matrice) > -1) ( array.splice($.inArray(articol, matrice), 1); )

Am folosit jQuery pentru sarcini grele, dar ai idee dacă vrei să fii nativ.

Trucul este să parcurgeți matricea de la început până la început, astfel încât să nu încurcați indicii atunci când eliminați elemente.

Var deleteMe = function(arr, me)( var i = arr.length; while(i--) if(arr[i] === eu) arr.splice(i,1); ) var arr = ["orange ","roșu","negru", "portocaliu", "alb" , "portocaliu" ]; deleteMe(arr, "orange");

arr este acum [„roșu”, „negru”, „alb”]

Funcția cleanArrayOfSpecificTerms(array,unwantedTermsArray) ( $.each(unwantedTermsArray, function(index, value) (​var index = array.indexOf(value); if (index > -1)) ( array.splice(index, 1); ) ) );

Var notInclude = ["Nu","Nu","Primul","Ultimul","Anterior","Următorul", "câinii","pisici"]; var splitTerms = ["apel", "jurnal", "câini", "pisici", "subiect", "schimbare", "preț"]; cleanArrayOfSpecificTerms(splitTerms,notInclude)

Am încercat să folosesc metoda funcției de la jbaron de mai sus, dar am constatat că trebuie să păstrez matricea originală neschimbată pentru a fi utilizată mai târziu și să creez o nouă matrice ca aceasta:

Var newArray = referenceArray;

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

Apoi il folosesc asa:

Var ID vas = record.get("ID vas"); var otherVessels = new Array(); newArrRemoveItem(vesselArr,vesselID,otherVessels);

Acum vesselArr rămâne intact și de fiecare dată când execut codul de mai sus, matricea otherVessels include totul, cu excepția ultimului element CAID.

indexOf este o opțiune, dar implementarea sa caută practic în întregul tablou o valoare, astfel încât timpul de execuție crește odată cu dimensiunea matricei. (deci este în fiecare browser, cred, am verificat doar Firefox).

Nu am IE6 de testat, dar l-aș numi un pariu sigur că puteți testa cel puțin un milion de elemente de matrice pe secundă în acest fel pe aproape orice computer client. Dacă [dimensiunea matricei] * [ interogări de căutare pe secundă] ar putea crește la mai mult de un milion, ar trebui să luați în considerare o implementare diferită.

Practic, puteți folosi un obiect pentru a crea un index pe matricea dvs., astfel:

Var index=(„trei”:0, „șapte”:1, „unsprezece”:2);

Orice normal Mediul JavaScript va crea un index de căutare pentru astfel de obiecte, astfel încât să puteți traduce rapid o cheie într-o valoare, indiferent de câte proprietăți are obiectul.

Aceasta este doar o metodă de bază, în funcție de nevoile dvs., puteți combina mai multe obiecte și/sau matrice pentru a face ca aceleași date să poată fi căutate rapid pentru diferite proprietăți. Dacă specificați nevoile dvs. specifice, vă pot sugera o structură de date mai specifică.

//Această funcție vă permite să eliminați tabloul par din matrice var removeFromArr = function(arr, elem) ( var i, len = arr.length, new_arr = , sort_fn = function (a, b) ( return a - b; ); pentru ( i = 0;< 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; }

Exemplu de utilizare

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

Fie arr = ; console.log(arr); //rezultat let index = arr.indexOf(30); if (index > -1) ( arr.splice(index, 1); ) console.log(arr); //rezultat

Var index = array.indexOf("articol"); if(index!=-1)( array.splice(index, 1); )

Există mai multe metode de a elimina un element de matrice din JavaScript. Acestea includ metodele pop și shift. Metoda pop elimină primul element din cauza a acestei matrice. Metoda shift elimină ultimul element din matricea dată.

Puteți seta lungimea matricei la 0 dacă doriți să eliminați toate elementele din matricea dată. Dar ce, trebuie să eliminați un anumit element?

De exemplu:

Array_name.splice(index);

Array_name.delete

Puteți utiliza metoda de îmbinare. Returnează o nouă matrice de elemente eliminate. Și matricea originală conține elementele rămase.

Consultați demonstrația de mai jos pentru a afla cum să utilizați metoda de îmbinare JavaScript și alte modalități de a elimina anumite elemente.

Demonstrarea îndepărtării unui element specific folosind metoda splice

Această demonstrație creează o serie de numere. Inițial, cinci elemente sunt adăugate la matrice. După aceasta, metoda de îmbinare este utilizată pentru a elimina al treilea element. În același mod, puteți elimina primul element al unui tablou din JavaScript.

Elementele matricei numerice sunt afișate înainte și după utilizare Metoda JavaScriptîmbinare astfel:

Cod JavaScript cu metoda de îmbinare:


"; pentru (i=0; i< Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "
"; ) document.getElementById("p1").innerHTML = the_arr_before_after; Arrretrun = Arr_Numbers.splice(2,1); var the_arr_before_after = "Elemente matrice după metoda de îmbinare:
"; pentru (i=0; i< Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "

Veți observa că am folosit doi parametri pentru JavaScript pentru a elimina un element de matrice. Prima specifică indexul elementului de eliminat. Al doilea este câte elemente trebuie eliminate după cheia specificată.

Următoarea demonstrație arată un caz în care folosim al doilea parametru.

Ce se întâmplă dacă al doilea parametru nu este specificat în metoda JavaScript splice?

Folosind același cod, dar fără al doilea parametru în metoda de îmbinare:

Arr_Numbers.splice(2);

Cod și rezultat:

Vedeți demonstrația și codul online

După cum puteți vedea, toate elementele dinaintea numărului de index specificat au fost de asemenea eliminate. În plus, metoda splice returnează o serie de elemente eliminate.

Cod JavaScript:

var Numere_Arr = ; var i; var the_arr_before_after = "Matricea originală:
"; pentru (i=0; i< Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "
"; ) document.getElementById("p1").innerHTML = the_arr_before_after; Arrretrun = Arr_Numbers.splice(2); var the_arr_before_after = "Elemente matrice după metoda de îmbinare:
"; pentru (i=0; i< Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "
"; ) document.getElementById("p2").innerHTML = the_arr_before_after; //Elementele matricei eliminate din matricea returnată var the_arr_before_after = "Elementele matricei eliminate:
"; pentru (i=0; i< Arrretrun.length; i++){ the_arr_before_after += Arrretrun[i] + "
"; ) document.getElementById("p3").innerHTML = the_arr_before_after;

Utilizarea funcției de ștergere pentru a elimina un element de matrice

De asemenea, puteți utiliza funcția de ștergere pentru a șterge un element de matrice din JavaScript. Dar economisește spațiu gol și dacă returnați acea matrice după ce utilizați funcția, elementul eliminat va fi redat ca nedefinit.

Să ne uităm la o demonstrație care folosește funcția de ștergere:

Vedeți demonstrația și codul online

Cod JavaScript:

var Arr_Strings = ["The","JavaScript","Array","Totorial"]; var i; var the_arr_before_after = "Elementele matricei de șiruri originale:

"; pentru (i=0; i< Arr_Strings.length; i++){ the_arr_before_after += Arr_Strings[i] + "
"; ) document.getElementById("p1").innerHTML = the_arr_before_after; //Folosind funcția de ștergere delete Arr_Strings; var the_arr_before_after = "Elemente matrice după metoda de îmbinare:

"; pentru (i=0; i< Arr_Strings.length; i++){ the_arr_before_after += Arr_Strings[i] + "
"; ) document.getElementById("p2").innerHTML = the_arr_before_after;

Puteți vedea că al treilea element arată nedefinit după ce a fost șters folosind funcția de ștergere.



eliminați elementul de matrice specific js(20)

Există vreo modalitate de a elimina un element din Matrice JavaScript?

Dată o matrice:

Var ary = [„trei”, „șapte”, „unsprezece”];

As vrea sa fac ceva de genul:

RemoveItem("șapte", ary);

M-am uitat în splice(), dar asta elimină doar numărul de poziție, în timp ce am nevoie de ceva pentru a elimina elementul după valoarea sa.

(20)

// editat multumesc lui MarcoCI pentru sfat

incearca asta:

Funcția wantDelete(item, arr)( for (var i=0;i !(comment.Id === commentId));

Iată o versiune care folosește funcția inArray a jQuery:

Var index = $.inArray(articol, matrice); dacă (index != -1) ( array.splice(index, 1); )

Puteți realiza acest lucru folosind funcția Lodash _.remove.

var array = ["trei", "șapte", "unsprezece"]; var evens = _.remove(array, function(e) ( return e !== "șapte"; )); console.log(evens);

Const _ = require("lodash"); _.fără(, 2); // ->

Într-adevăr, nu înțeleg de ce nu se poate rezolva asta

Arr = arr.filter(valoare => valoare !== „șapte”);

Sau poate doriți să utilizați vanilla JS

Arr = arr.filter(funcție(valoare) (valoare de returnare !== „șapte” ));

O alta varianta:

Dacă (!Array.prototype.removeArr) ( Array.prototype.removeArr = function(arr) ( if(!Array.isArray(arr)) arr=;//să fim drăguți cu oamenii care pun o valoare non-matrice aici.. asta ar putea fi eu! var that = this if(arr.length)( var i=0; while(i-1)( that.splice(i,1); )else i++; ) ) return that; ) )

Acesta este din nou indexOf() în interiorul buclei, dar în ipoteza că matricea de șters este mică în raport cu matricea de șters; fiecare ștergere scurtează bucla while.

Acest lucru vă va permite să faceți următoarele:

Var ary = [„trei”, „șapte”, „unsprezece”]; var aryWithoutSeven = ary.filter(funcție(valoare) (​valoare de returnare != „șapte” )); console.log(aryWithoutSeven); // returnează ["trei", "unsprezece"]

Acest lucru a fost notat și în acest thread în altă parte: https://.com/a/20827100/293492

> Array.prototype.remove=function(v)(... șterge acest...);

> var myarray="3","24","55","2"]; undefined > myarray.remove("55"); undefined > myarray [ "3", "24", "2" ]

O căptușeală o va face,

Var ary = [„trei”, „șapte”, „unsprezece”]; // Eliminați elementul „șapte” din matrice var filteredAry = ary.filter(funcție(e) ( return e !== „șapte” )) //=> [„trei”, „unsprezece”] // În ECMA6 (săgeată sintaxa funcției): var filteredAry = ary.filter(e => e !== „șapte”)

Aceasta folosește funcția de filtru din JS. Este acceptat în IE9 și mai sus.

filter() apelează funcția de returnare furnizată o dată pentru fiecare element din matrice și creează o nouă matrice cu toate valorile pentru care apelarea returnează o valoare care se evaluează la adevărat. callback este apelat numai pentru indicii de matrice care au valori atribuite; nu este apelat pentru indecși care au fost abandonați sau cărora nu li s-au atribuit niciodată valori. Elementele matricei care eșuează testul de apel invers sunt pur și simplu ignorate și nu sunt incluse în noua matrice.

Deci, practic, este la fel ca toate celelalte soluții pentru (cheia var în ary) ( ... ), cu excepția faptului că pentru in este acceptat ca IE6.

Practic, un filtru este o metodă convenabilă care arată mult mai frumos (și poate fi înlănțuită) spre deosebire de un constructor for in (AFAIK).

Verificați asta:

Pentru(var i în matrice)( if(array[i]=="șapte")( array.splice(i,1); break; ) )

si in functie:

Funcția removeItem(array, item)( for(var i in array)( if(array[i]==item)( array.splice(i,1); break; ) ) ) removeItem(array, "șapte");

Eliminarea tuturor elementelor care se potrivesc dintr-o matrice (nu doar primul, așa cum pare să fie cel mai general răspuns aici):

În timp ce ($.inArray(articol, matrice) > -1) ( array.splice($.inArray(articol, matrice), 1); )

Am folosit jQuery pentru sarcini grele, dar ai idee dacă vrei să fii nativ.

Trucul este să parcurgeți matricea de la început până la început, astfel încât să nu încurcați indicii atunci când eliminați elemente.

Var deleteMe = function(arr, me)( var i = arr.length; while(i--) if(arr[i] === eu) arr.splice(i,1); ) var arr = ["orange ","roșu","negru", "portocaliu", "alb" , "portocaliu" ]; deleteMe(arr, "orange");

arr este acum [„roșu”, „negru”, „alb”]

Funcția cleanArrayOfSpecificTerms(array,unwantedTermsArray) ( $.each(unwantedTermsArray, function(index, value) (​var index = array.indexOf(value); if (index > -1)) ( array.splice(index, 1); ) ) );

Var notInclude = ["Nu","Nu","Primul","Ultimul","Anterior","Următorul", "câinii","pisici"]; var splitTerms = ["apel", "jurnal", "câini", "pisici", "subiect", "schimbare", "preț"]; cleanArrayOfSpecificTerms(splitTerms,notInclude)

Am încercat să folosesc metoda funcției de la jbaron de mai sus, dar am constatat că trebuie să păstrez matricea originală neschimbată pentru a fi utilizată mai târziu și să creez o nouă matrice ca aceasta:

Var newArray = referenceArray;

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

Apoi il folosesc asa:

Var ID vas = record.get("ID vas"); var otherVessels = new Array(); newArrRemoveItem(vesselArr,vesselID,otherVessels);

Acum vesselArr rămâne intact și de fiecare dată când execut codul de mai sus, matricea otherVessels include totul, cu excepția ultimului element CAID.

indexOf este o opțiune, dar implementarea sa caută practic în întregul tablou o valoare, astfel încât timpul de execuție crește odată cu dimensiunea matricei. (deci este în fiecare browser, cred, am verificat doar Firefox).

Nu am IE6 de testat, dar l-aș numi un pariu sigur că puteți testa cel puțin un milion de elemente de matrice pe secundă în acest fel pe aproape orice computer client. Dacă [dimensiunea matricei] * [interogări de căutare pe secundă] este probabil să depășească un milion, ar trebui să luați în considerare o implementare diferită.

Practic, puteți folosi un obiect pentru a crea un index pe matricea dvs., astfel:

Var index=(„trei”:0, „șapte”:1, „unsprezece”:2);

Orice cadru JavaScript normal va crea un index de căutare pentru astfel de obiecte, astfel încât să puteți traduce rapid o cheie într-o valoare, indiferent de câte proprietăți are obiectul.

Aceasta este doar o metodă de bază, în funcție de nevoile dvs., puteți combina mai multe obiecte și/sau matrice pentru a face ca aceleași date să poată fi căutate rapid pentru diferite proprietăți. Dacă specificați nevoile dvs. specifice, vă pot sugera o structură de date mai specifică.

//Această funcție vă permite să eliminați tabloul par din matrice var removeFromArr = function(arr, elem) ( var i, len = arr.length, new_arr = , sort_fn = function (a, b) ( return a - b; ); pentru ( i = 0;< 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; }

Exemplu de utilizare

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

Fie arr = ; console.log(arr); //rezultat let index = arr.indexOf(30); if (index > -1) ( arr.splice(index, 1); ) console.log(arr); //rezultat

Var index = array.indexOf("articol"); if(index!=-1)( array.splice(index, 1); )