21

jQuery/JavaScriptで、配列要素を削除するにはどうすればよいですか?

何かのようなもの:

array.remove(array["key"]);

// or 

array.remove("value")
4

4 に答える 4

29

コードから判断すると、オブジェクトのプロパティを削除したいようです。これは次のように行いますdelete

var obj = { key: "value" };

delete obj["key"];

JavaScript でオブジェクトを操作するための非常に役立つガイドがMDNにあります。

于 2012-06-23T15:50:03.727 に答える
27

配列の場合はspliceメソッドを使用します:

var array = [1, 2, 3, 4, 5];
array.splice(2, 1);
console.log(array); // [1, 2, 4, 5]

配列内の特定の要素 (の最初の出現) を削除する独自の関数を作成できます。

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]

オブジェクトから項目を削除する場合は、次のdelete構文 を使用します。

var a = {key1: 'val1', key2: 'val2'};
delete a.key1;
console.log(a); // {key2: 'val2'}

また、これを処理する独自の関数を作成できます。

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!


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 プラグインとして追加できます。

(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); 

そして、次のように使用します。

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}
于 2012-06-23T15:51:14.987 に答える
6
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 1);

配列の果物、位置 2 から 1 つの項目を削除します。Apple

于 2012-06-23T15:50:43.147 に答える
2

array["key"]は配列のキーではありません (JavaScript には連想配列はありません。PHP を使用している場合は連想配列のように見えるかもしれませんが、それらはオブジェクトです)。オブジェクトのプロパティです。delete を使用できると思います

delete array.key
于 2012-06-23T15:50:11.183 に答える