次のような配列があります。 var y = [1, 2, 3];
2
アレイから削除したいy
。
jQueryを使用して配列から特定の値を削除するにはどうすればよいですか?私は試しましたpop()
が、それは常に最後の要素を削除します。
次のような配列があります。 var y = [1, 2, 3];
2
アレイから削除したいy
。
jQueryを使用して配列から特定の値を削除するにはどうすればよいですか?私は試しましたpop()
が、それは常に最後の要素を削除します。
回答:
作業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/
jQueryを使用すると、次のような単一行の操作を実行できます。
例: http : //jsfiddle.net/HWKQY/
y.splice( $.inArray(removeItem, y), 1 );
ネイティブ.splice()
およびjQueryのを使用し$.inArray()
ます。
while
:ループと、このような一時的な変数var found; while ((found = $.inArray(removeItem, y)) !== -1) y.splice(found, 1);
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);
underscore.jsを使用できます。それは本当に物事をシンプルにします。
あなたの場合、あなたが書く必要があるすべてのコードは-
_.without([1,2,3], 2);
結果は[1,3]になります。
それはあなたが書くコードを減らします。
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']
追加は簡単ですa.push('c')
//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')
i
が上書きされることです。
JavaScriptでこれを行うネイティブの方法はありません。代わりに、ライブラリを使用するか、これを行うための小さな関数を書くことができます:http : //ejohn.org/blog/javascript-array-remove/
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が削除されます。
使い方:
value
にarray
count
始まる値の数を削除するindex
のでcount
、1
//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;
スプライスを使用した簡単な解決策があります。W3Schoolによると、スプライス構文は次のとおりです。
array.splice(index, howmany, item1, ....., itemX)
インデックス 必須。アイテムを追加/削除する位置を指定する整数。配列の末尾からの位置を指定するには負の値を使用します
幾つ必須。削除するアイテムの数。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 );
お役に立てれば。
最初に要素が配列に存在するかどうかを確認します
$.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);
}
次のように、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]
これはすべて、ポケモンをテーマにしたアクションで確認できます。
/** 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"!
これはすべてのケースで機能し、上記の方法の問題を回避します。お役に立てば幸いです。
ここで2番目に賛成の回答は、OPが望む意図された動作の1行のjQueryメソッドに最も近いトラックにありますが、コードの最後でつまずいて、欠陥があります。削除するアイテムが実際に配列にない場合、最後のアイテムが削除されます。
この問題に気づいた人もいれば、この問題を防ぐためにループする方法を提供している人もいます。私は見つけることができる最も短くてクリーンな方法を提供し、私は彼らの答えの下で、この方法に従ってコードを修正する方法についてコメントしました。
var x = [1, 2, "bye", 3, 4];
var y = [1, 2, 3, 4];
var removeItem = "bye";
// Removing an item that exists in array
x.splice( $.inArray(removeItem,x), $.inArray(removeItem,x) ); // This is the one-liner used
// Removing an item that DOESN'T exist in array
y.splice( $.inArray(removeItem,y), $.inArray(removeItem,y) ); // Same usage, different array
// OUTPUT -- both cases are expected to be [1,2,3,4]
alert(x + '\n' + y);
配列xは要素「bye」を簡単に削除し、配列yは変更されません。
引数$.inArray(removeItem,array)
を2番目の引数として使用すると、実際にはスプライスする長さになります。アイテムが見つからなかったので、これはと評価されarray.splice(-1,-1);
、スプライスされるものは何もありません...これのためにループを記述する必要はありません。
バニラ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
Sarfrazからの回答を追加するために、まだ誰も関数にしていないことに驚いています。
配列に同じ値が複数ある場合は、.filterメソッドを使用してddagsanからの回答を使用します。
function arrayRemoveVal(array, removeValue){
var newArray = jQuery.grep(array, function(value) {return value != removeValue;});
return newArray;
}
var promoItems = [1,2,3,4];
promoItems = arrayRemoveVal(promoItems, 3);// removes 3
console.log(promoItems);
promoItems = arrayRemoveVal(promoItems, 3);// removes nothing
console.log(promoItems);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>