[英]Removing an element from an array specifying a value in Javascript
我读过这个问题:
而且看起来 splice 和 delete 都需要元素的索引才能删除,那么当我有值时如何轻松找到索引?
例如,如果我有一个如下所示的数组:
["test1", "test2", "test3"]
我想删除 test2。 我现在正在使用的过程,我希望这不是正确的方法,正在使用$.each
检查数组中每个元素的值,在整个过程中维护一个计数器(用作索引引用) 并且如果该值等于“test2”,那么我有我的索引(以计数器的形式),然后使用 splice 将其删除。
虽然阵列变得更大,但我想这将是一个缓慢的过程,但我有什么替代方案?
var array = ["test1", "test2", "test3"];
array.splice(array.indexOf("test2"), 1);
indexOf
( 来源):
返回可以在数组中找到给定元素的第一个索引,如果不存在则返回 -1。
您可以使用 jQuery 的$.inArray
并摆脱您的$.each
循环,它可以跨浏览器工作(与 Array.indexOf 不同):
var index = $.inArray("test2", ["test1", "test2", "test3"]); // 1
(我意识到你的问题没有用'jQuery'标记,但你确实提到你已经在使用$.each
循环)。
您可以使用Array#indexOf
按值查找元素,然后使用生成的索引。 请注意,较旧的浏览器可能没有它,因此您需要检查它是否存在,如果不添加它 - 这是 MDC 的一些代码,它进行检查并添加 function 如果它不存在。
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
循环(即不正确但常见的for..in
循环)将开始出现问题,因为它们会看到字符串 "indexOf" 当他们只希望看到数组索引时,请参阅此博客文章了解详细信息。
underscore.js 是一个非常棒的小库,有很多很好的实用功能。 在这种情况下,#reject 是合适的。
http://documentcloud.github.com/underscore/#reject
(虽然内部方法当然类似于您的手动索引查找和切片/拼接)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.