2011-08-10 2 views
8

자바 스크립트에 값을 지정하는 배열에서 요소 제거 :나는이 질문을 읽고

Deleting array elements in JavaScript - delete vs splice

그리고 제거하기 위해 스플 라이스 삭제 모두 요소의 인덱스를 필요로하는이 나타나므로 어떻게 가치가있을 때 색인을 쉽게 찾을 수 있습니까?

["test1", "test2", "test3"] 

내가 TEST2을 제거하려면 :이처럼 보이는 배열이있는 경우 예를 들어

. 내가 지금 사용하고있는 프로세스는 올바른 방법이 아니며, 배열의 각 요소 값을 확인하고 (인덱스 참조로 사용되는) 프로세스를 통해 카운터를 유지하며 $.each을 사용하고 있습니다. 값이 "test2"와 같으면 카운터의 형식으로 인덱스를 만든 다음 스플 라이스를 사용하여 인덱스를 제거합니다.

배열이 커지면 느린 프로세스가 될 것이라고 생각하지만 대안은 무엇입니까?

당신은 항목을 제거하기 위해 splice() 기능을 사용하려면
+1

원하는 것을 보려면'indexOf'를보십시오. –

+0

요소를 정렬 할 수 있습니까? – VirtualTroll

답변

4

, indexOf 배열에 그것을 발견 할 것이다 :

이 배열의 특정 요소를 찾는 방법은 다음과 같습니다 (을 제거 할 알고)

var index = array.indexOf('test2'); 

전체 예 :

var array = ['test1', 'test2', 'test3']; 
var value_to_remove = 'test2'; 
array.splice(array.indexOf(value_to_remove), 1); 

Working Demo

+0

그는 그 사실을 알고 있습니다. 그는 심지어 그가 질문에 그것을 사용하고 있다고 말합니다. 그가 알고 자하는 것은'splice'에서 USE 인덱스를 찾는 방법입니다. –

+0

josh.trow와 Rionmonster에게 감사드립니다! –

+0

희망 사항이 문제를 해결했습니다. 피트 –

3
var array = ["test1", "test2", "test3"]; 
array.splice(array.indexOf("test2"), 1); 

indexOf (source)
반환 주어진 소자가 어레이에서 발견 될 수있는 또는 -1이 존재하지 않는 경우 최초의 인덱스.

1

Array#indexOf을 사용하여 값으로 요소를 찾은 다음 결과 색인을 사용하십시오. 이전 버전의 브라우저에는 없을 수도 있으므로 브라우저에 추가되었는지 확인하고 추가하지 않을 경우 검사를 수행하는 MDC의   — here's some code을 추가하고 거기에 없으면 함수를 추가해야합니다.

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function (searchElement /*, fromIndex */) { 
     "use strict"; 
     if (this === void 0 || 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 !== (1/0) && n !== -(1/0)) { 
       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; 
    } 
} 

주 당신은 같은 Array 프로토 타입에 일을 추가하는 경우, 그들은 그들 만이 볼 수 있기 때문에 문제가 시작됩니다 배열 인덱스 (즉, incorrect하지만 일반적인 for..in 루프입니다) 볼 수 있습니다 가정 for..in 루프 배열 인덱스를보고있을 때만 "indexOf"문자열을 참조하십시오. 자세한 내용은 this blog post을 참조하십시오.

2

할 수 있습니다 jQuery의 $.inArray하고 $.each 루프를 제거하고,이 (사항 Array.indexOf 달리) 크로스 브라우저를 작동합니다

var index = $.inArray("test2", ["test1", "test2", "test3"]); // 1 

(나는 당신의 질문은 'jQuery를'태그되지 실현하지만, 당신은 이미 $.each 루프를 사용하고 있다고 언급합니다.

+0

정말 대단합니다. 고마워요! –

관련 문제