1. ホーム
  2. javascript

[解決済み] 配列から値を指定して項目を削除するには?[重複している]。

2022-03-19 11:19:53

質問

JavaScriptの配列から項目を削除する方法はありますか?

配列が与えられたら

var ary = ['three', 'seven', 'eleven'];

というようなことをしたいのですが。

removeItem('seven', ary);

を調べてみました。 splice() しかし、それは位置番号で削除するだけであり、私はその値によって項目を削除する何かが必要です。

どのように解決するのですか?

これは、ネイティブプロトタイプに追加することが許可されていない場合、グローバル関数またはカスタムオブジェクトのメソッドにすることができます。これは、引数のいずれかにマッチする項目を配列からすべて削除します。

Array.prototype.remove = function() {
    var what, a = arguments, L = a.length, ax;
    while (L && this.length) {
        what = a[--L];
        while ((ax = this.indexOf(what)) !== -1) {
            this.splice(ax, 1);
        }
    }
    return this;
};

var ary = ['three', 'seven', 'eleven'];

ary.remove('seven');

/*  returned value: (Array)
three,eleven
*/

グローバルにするために

function removeA(arr) {
    var what, a = arguments, L = a.length, ax;
    while (L > 1 && arr.length) {
        what = a[--L];
        while ((ax= arr.indexOf(what)) !== -1) {
            arr.splice(ax, 1);
        }
    }
    return arr;
}
var ary = ['three', 'seven', 'eleven'];
removeA(ary, 'seven');


/*  returned value: (Array)
three,eleven
*/

そして、IE8以下への配慮として-。

if(!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(what, i) {
        i = i || 0;
        var L = this.length;
        while (i < L) {
            if(this[i] === what) return i;
            ++i;
        }
        return -1;
    };
}