2011-08-10 69 views
8

我已经阅读了这个问题:删除从一个数组在Javascript中指定值的元素

Deleting array elements in JavaScript - delete vs splice

,看来,这两个接头和删除,以消除需要的元素的索引,因此如何当我有价值时,我可以轻松找到索引吗?

例如,如果我有一个数组,看起来像这样:

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

,我想删除TEST2。我现在正在使用的过程,我希望不是正确的方法,它使用$.each检查数组中每个元素的值,在过程中维护一个计数器(用作索引参考),以及如果该值等于“test2”,那么我有我的索引(以计数器的形式),然后使用拼接删除它。

当数组变大时,我会想象这将是一个缓慢的过程,但我有什么替代方案?

+1

请参阅'indexOf'获取您想要的内容。 –

+0

您的元素是否可以排序? – VirtualTroll

回答

4

您想使用splice()功能删除的项,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); 

indexOfsource):
返回在该给定元素可以在阵列中可以发现,或-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原型那样,for..in循环,即假定他们只能看到数组索引(即incorrect但共同for..in环路)将开始有问题,因为他们会看到当他们只希望看到数组索引时,字符串“indexOf”详见this blog post

2

你可以jQuery的$.inArray和摆脱你的$.each循环,和它的作品跨浏览器(不像Array.indexOf):

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

(我知道您的问题没有标记为“jQuery的”,但你确实提到你已经在使用$.each循环)。

+0

这很好,谢谢! –

相关问题