2012-05-29 14 views
7

może ktoś mi powiedzieć, w jaki sposób można usunąć elementu ciąg znaków z tablicy Mam google to i wszystko, co dostaje jest usunięcie przez numer indeksuusuń elementem ciąg z javascript tablicy

mój przykład:

var myarray = ["xyz" , "abc" , "def"] ; 
var removeMe = "abc" ; 

    myarray.remove(removeMe) ; 
    consle.log(myarray) ; 

to, co otrzymuję od konsoli:

Uncaught TypeError: Object xyz,abc,def has no method 'remove' 

jsfiddle

Odpowiedz

6

Od https://stackoverflow.com/a/3955096/711129:

Array.prototype.remove= function(){ 
    var what, a= arguments, L= a.length, ax; 
    while(L && this.length){ 
     what= a[--L]; 
     while((ax= this.indexOf(what))!= -1){ 
      this.splice(ax, 1); 
     } 
    } 
    return this; 
} 
var ary = ['three', 'seven', 'eleven']; 

ary.remove('seven') 

lub, co czyni go funkcję globalnego:

function removeA(arr){ 
var what, a= arguments, L= a.length, ax; 
while(L> 1 && arr.length){ 
    what= a[--L]; 
    while((ax= arr.indexOf(what))!= -1){ 
     arr.splice(ax, 1); 
    } 
} 
return arr; 
} 
var ary= ['three','seven','eleven']; 
removeA(ary,'seven') 

Trzeba utworzyć funkcję siebie. Możesz zapętlić się przez tablicę i usunąć ten element z tej funkcji lub sprawić, że ta funkcja zrobi to za Ciebie. Tak czy inaczej, nie jest to standardowa funkcja JS.

5

Spróbuj jak poniżej,

myarray.splice(myarray.indexOf(removeMe),1); 

Możesz dodać poniższy skrypt (from MDN) dla przeglądarek, które nie obsługują indexOf

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function (searchElement /*, fromIndex */) { 
     "use strict"; 
     if (this == null) { 
      throw new TypeError(); 
     } 
     var t = Object(this); 
     var len = t.length >>> 0; 
     if (len === 0) { 
      return -1; 
     } 
     var n = 0; 
     if (arguments.length > 0) { 
      n = Number(arguments[1]); 
      if (n != n) { // shortcut for verifying if it's NaN 
       n = 0; 
      } else if (n != 0 && n != Infinity && n != -Infinity) { 
       n = (n > 0 || -1) * Math.floor(Math.abs(n)); 
      } 
     } 
     if (n >= len) { 
      return -1; 
     } 
     var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); 
     for (; k < len; k++) { 
      if (k in t && t[k] === searchElement) { 
       return k; 
      } 
     } 
     return -1; 
    } 
} 
+4

Jeden komentarz, niektóre przeglądarki nie obsługują 'indexOf' – jwatts1980

+1

Ponadto, jeśli' indexOf' nie znaleźć element, masz zamiar złączenia z indeksu '-1' które nadal usuwa element – Esailija

16

Ponieważ używasz jQuery

myarray.splice($.inArray("abc", myarray), 1);

EDYCJA Jeśli element nie znajduje się w tablicy, ten "jednolinijkowy" prawdopodobnie spowoduje błąd. Coś trochę lepiej

var index = $.inArray("abc", myarray); 
if (index>=0) myarray.splice(index, 1); 
+2

Nie trzeba do tego celu używać jQuery. –

+3

Niektóre przeglądarki nie obsługują 'indexOf'. "InArray" Jquery'ego pozwoli na uproszczenie działania przeglądarki. – jwatts1980

+0

+1 za używanie '> = 0' http://jsperf.com/not-vs-gt-vs-ge/4 (i dla poprawnej odpowiedzi ofc) – ajax333221