首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在jquery中,如何通过index["key"]或value删除数组元素

在jquery中,如何通过index["key"]或value删除数组元素
EN

Stack Overflow用户
提问于 2012-06-23 23:46:14
回答 4查看 93.1K关注 0票数 21

jQuery/JavaScript,中如何删除数组元素?

类似于:

代码语言:javascript
复制
array.remove(array["key"]);

// or 

array.remove("value")
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-23 23:50:04

从您的代码判断,您似乎想要删除对象的属性,就像使用delete所做的那样

代码语言:javascript
复制
var obj = { key: "value" };

delete obj["key"];

MDN上可以找到关于在JavaScript中使用对象的非常有用的指南。

票数 29
EN

Stack Overflow用户

发布于 2012-06-23 23:51:15

对于阵列,请使用splice方法:

代码语言:javascript
复制
var array = [1, 2, 3, 4, 5];
array.splice(2, 1);
console.log(array); // [1, 2, 4, 5]

您可以创建自己的函数来删除(第一次出现的)数组中的某个元素:

代码语言:javascript
复制
Array.prototype.remove = function(el) {
    return this.splice(this.indexOf(el), 1);
}
var arr = [1, 2, 3, 4, 5];
arr.remove(4);
console.log(arr); // [1, 2, 3, 5]

如果要从object中删除项目,请使用delete语法:

代码语言:javascript
复制
var a = {key1: 'val1', key2: 'val2'};
delete a.key1;
console.log(a); // {key2: 'val2'}

同样,您可以创建自己的函数来处理此问题:

代码语言:javascript
复制
Object.prototype.remove = function(el) {
    if (this.hasOwnProperty(el)) {
        delete this[el];
    }
    return this;
}
var a = {key1 : 'val1', key2: 'val2'};
a.remove('key1');
console.log(a); // {key2: 'val2'}

更新

  1. 虽然这只是一个例子,但正如@Eric指出的那样,修改对象的原型并不是一个很好的主意。因此,我重写了不会改变对象状态的示例,
  2. 添加了检查元素是否存在于数组中的检查。如果它不存在,则返回的索引将为-1,splice方法将删除最后一个元素(数组末尾的第一个元素)。谢谢,@amnotiam!

代码语言:javascript
复制
function remove(collection, key) {
    // if the collections is an array
    if(collection instanceof Array) {
        if(collection.indexOf(key) != -1) {
            collection.splice(collection.indexOf(key), 1);
        }
    }
    // it's an object
    else if(collection.hasOwnProperty(key)) {
        delete collection[key];
    }
    return collection;
};

当然,由于问题被标记为jquery,我们可以将此函数添加为jquery插件:

代码语言:javascript
复制
(function($, global, undefined) {
    $.removeElementFromCollection = function(collection,key) {
        // if the collections is an array
        if(collection instanceof Array) {
            // use jquery's `inArray` method because ie8 
            // doesn't support the `indexOf` method
            if($.inArray(key, collection) != -1) {
                collection.splice($.inArray(key, collection), 1);
            }
        }
        // it's an object
        else if(collection.hasOwnProperty(key)) {
            delete collection[key];
        }

        return collection;
    };
})(jQuery, window); 

然后像这样使用它:

代码语言:javascript
复制
var array = [1, 2, 3, 4, 5];
$.removeElementFromCollection(array, 2); // [1, 3, 4, 5]

var object = {1: 2, 3: 4};
$.removeElementFromCollection(object, 1); // {3: 4}
票数 27
EN

Stack Overflow用户

发布于 2012-06-23 23:50:43

代码语言:javascript
复制
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 1);

将从fruits数组中删除1项,位置2,即Apple

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11170825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档