web-dev-qa-db-ja.com

JQueryを使って配列から特定の値を削除する方法

私はこのような配列を持っています:var y = [1, 2, 3];

配列yから2を削除したいです。

JQueryを使って配列から特定の値を削除する方法を教えてください。私はpop()を試しましたが、それは常に最後の要素を削除します。

384
Elankeeran

作業中の _ jsfiddle _

あなたはこのようなことをすることができます:

var y = [1, 2, 2, 3, 2]
var removeItem = 2;

y = jQuery.grep(y, function(value) {
  return value != removeItem;
});

結果:

[1, 3]

http://snipplr.com/view/14381/remove-item-from-array-with-jquery/ /

565
Sarfraz

JQueryを使用すると、次のような単一行操作を実行できます。

例: http://jsfiddle.net/HWKQY/

y.splice( $.inArray(removeItem, y), 1 );

ネイティブの .splice() とjQueryの $.inArray() を使用します。

343
user113716

jQuery.filterメソッドは便利です。これはArrayオブジェクトに利用できます。

var arr = [1, 2, 3, 4, 5, 5];

var result = arr.filter(function(elem){
   return elem != 5; 
});//result -> [1,2,3,4]

http://jsfiddle.net/emrefatih47/ar0dhvhw/ /

Ecmascript 6では:

let values = [1,2,3,4,5];
let evens = values.filter(v => v % 2 == 0);
alert(evens);

https://jsfiddle.net/emrefatih47/nnn3c2fo/

42
ddagsan

underscore.js を使用できます。それは本当に物事をシンプルにします。

あなたの場合あなたが書く必要があるだろうすべてのコードは -

_.without([1,2,3], 2);

結果は[1,3]になります。

それはあなたが書くコードを減らします。

35
vatsal

ないjQueryの道けど...なぜ簡単な方法を使用しないでください。次の配列から「C」を削除

var a = ['a','b','c','d']
a.splice(a.indexOf('c'),1);
>["c"]
a
["a", "b", "d"]

また、使用することができます(自分自身への注意: あなたが所有していないオブジェクトを変更しないでください

Array.prototype.remove = function(v) { this.splice(this.indexOf(v) == -1 ? this.length : this.indexOf(v), 1); }
var a = ['a','b','c'];
a.remove('c'); //value of "a" is now ['a','b']

追加はsimplera.Push('c')です

31
Aamir Afridi

配列内のアイテムを削除

var arr = ["jQuery", "JavaScript", "HTML", "Ajax", "Css"];
var itemtoRemove = "HTML";
arr.splice($.inArray(itemtoRemove, arr), 1);
14
praveen d
//This prototype function allows you to remove even array from array
Array.prototype.remove = function(x) { 
    var i;
    for(i in this){
        if(this[i].toString() == x.toString()){
            this.splice(i,1)
        }
    }
}

使用例

var arr = [1,2,[1,1], 'abc'];
arr.remove([1,1]);
console.log(arr) //[1, 2, 'abc']

var arr = [1,2,[1,1], 'abc'];
arr.remove(1);
console.log(arr) //[2, [1,1], 'abc']

var arr = [1,2,[1,1], 'abc'];
arr.remove('abc');
console.log(arr) //[1, 2, [1,1]]

このプロトタイプ関数を使用するには、コードに貼り付ける必要があります。それからあなたはそれを 'ドット記法'でどんな配列にでも適用することができます:

someArr.remove('elem1')
11
yesnik

Javascriptにこれを行うためのネイティブな方法はありません。ライブラリを使用するか、代わりにこれを行うための小さな関数を書くことができます。 http://ejohn.org/blog/javascript-array-remove/

4
AussieNick

あなたはこのように.not関数を使うことができます:

var arr = [ 1 , 2 , 3 , 5 , 8];
var searchValue = 2;

var newArr = $(arr).not([searchValue]).get();
3

私のバージョンのuser113716の答え。一致が見つからない場合、彼は値を削除しますが、これは良くありません。

var y = [1, 2, 3]
var removeItem = 2;

var i = $.inArray(removeItem,y)

if (i >= 0){
    y.splice(i, 1);
}

alert(y);

これにより、一致が見つかった場合は1アイテム、一致が見つからなかった場合は0が削除されます。

使い方:

  • $ .inArray(value、array)は、value内のarrayの最初のインデックスを見つけるjQuery関数です。
  • 値が見つからない場合、上記は-1を返すので、削除する前にiが有効なインデックスであることを確認してください。インデックス-1を削除すると、最後のインデックスを削除することになります。これは役に立ちません。
  • .splice(index、count)はcountから始まるindex個の値を削除するので、count of 1が欲しいだけです。
2
andrewb

スプライスを使った簡単な解決法があります。 W3Schoolによれば spliceの構文は以下の通りです。

array.splice(index, howmany, item1, ....., itemX)

インデックス 必須。項目を追加または削除する位置を指定する整数。配列の末尾からの位置を指定するには負の値を使用します

howmany 必須。削除するアイテムの数0に設定すると、アイテムは削除されません

item1、...、itemX オプション。配列に追加される新しい項目

これを覚えておいて、次のjsは見つかった場合、与えられた配列から1つ以上のマッチした項目をポップします。

var x = [1,2,3,4,5,4,4,6,7];
var item = 4;
var startItemIndex = $.inArray(item, x);
var itemsFound = x.filter(function(elem){
                            return elem == item;
                          }).length;

または

var itemsFound = $.grep(x, function (elem) {
                              return elem == item;
                           }).length;

だから、決勝戦は次のようになります

x.splice( startItemIndex , itemsFound );

お役に立てれば。

2
Mahib
//in case somebody needs something like this:  multidimensional array (two items)

var ar = [[0,'a'],[1,'b'],[2,'c'],[3,'d'],[4,'e'],[5,'f']];

var removeItem = 3;  


ar = jQuery.grep(ar, function(n) {
  return n[0] != removeItem;   //or n[1] for second item in two item array
});
ar;
2

最初に要素が配列に存在するかどうかを調べます

$.inArray(id, releaseArray) > -1

上記の行が配列内に存在する場合はその要素のインデックスを返し、それ以外の場合は-1を返します。

 releaseArray.splice($.inArray(id, releaseArray), 1);

現在行の上にある場合、この要素が見つかった場合は配列から削除されます。以下のロジックをまとめると、配列から要素をチェックして削除するために必要なコードです。

  if ($.inArray(id, releaseArray) > -1) {
                releaseArray.splice($.inArray(id, releaseArray), 1);
            }
            else {
                releaseArray.Push(id);
            }
1
Luqman Cheema

次のように、Arrayクラスをpick_and_remove()関数で拡張します。

var ArrayInstanceExtensions = {
    pick_and_remove: function(index){
        var picked_element = this[index];
        this.splice(index,1);
        return picked_element;
    } 
};
$.extend(Array.prototype, ArrayInstanceExtensions);

少し冗長に思えるかもしれませんが、あなたはおそらくあなたが望むどんな配列でもpick_and_remove()を呼び出すことができます!

使用法:

array = [4,5,6]           //=> [4,5,6]
array.pick_and_remove(1); //=> 5
array;                    //=> [4,6]

あなたはポケモンをテーマにした行動 ここでこれらすべてを見ることができます。

1
Starkers

配列内のオブジェクトのプロパティに基づいて複数のオブジェクトを一度に削除する必要がある場合も、同様の作業を行いました。

それで、数回の反復の後に私は終わる:

list = $.grep(list, function (o) { return !o.IsDeleted });
1
Bogdan Litescu
/** SUBTRACT ARRAYS **/

function subtractarrays(array1, array2){
    var difference = [];
    for( var i = 0; i < array1.length; i++ ) {
        if( $.inArray( array1[i], array2 ) == -1 ) {
                difference.Push(array1[i]);
        }
    }
return difference;
}  

その後、コード内の任意の場所に関数を呼び出すことができます。

var I_like    = ["love", "sex", "food"];
var she_likes = ["love", "food"];

alert( "what I like and she does't like is: " + subtractarrays( I_like, she_likes ) ); //returns "Naughty :P"!

これはすべての場合に機能し、上記の方法における問題を回避します。お役に立てば幸いです。

1
Kareem

Vanilla JavaScriptを使用して配列から2を安全に削除するには、次の手順を実行します。

// Define polyfill for browsers that don't natively support Array.indexOf()
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(searchElement, fromIndex) {
    var k;
    if (this===null) {
      throw new TypeError('"this" is null or not defined');
    }
    var O = Object(this),
      len = O.length >>> 0;
    if (len===0) return -1;
    var n = +fromIndex || 0;
    if (Math.abs(n)===Infinity) n = 0;
    if (n >= len) return -1;
    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
    while (k < len) {
      if (k in O && O[k]===searchElement) return k;
      ++k;
    }
    return -1;
  };
}

// Remove first instance of 2 from array
if (y.indexOf(2) > -1) {
  y.splice(y.indexOf(2), 1);
}

/* To remove all instances of 2 from array, change 'if' to 'while':
while (y.indexOf(2) > -1) {
  y.splice(y.indexOf(2), 1);
}
*/

console.log(y);  // Returns [1, 3]

ポリフィルソース: Mozilla

0
thdoan