Şöyle bir dizi var: var y = [1, 2, 3];
2Diziden kaldırmak istiyorum y.
JQuery kullanarak bir diziden belirli bir değeri nasıl kaldırabilirim? Ben denedim pop()ama bu her zaman son elemanı kaldırır.
Şöyle bir dizi var: var y = [1, 2, 3];
2Diziden kaldırmak istiyorum y.
JQuery kullanarak bir diziden belirli bir değeri nasıl kaldırabilirim? Ben denedim pop()ama bu her zaman son elemanı kaldırır.
Yanıtlar:
Çalışan bir JSFIDDLE
Bunun gibi bir şey yapabilirsiniz:
var y = [1, 2, 2, 3, 2]
var removeItem = 2;
y = jQuery.grep(y, function(value) {
return value != removeItem;
});
Sonuç:
[1, 3]
http://snipplr.com/view/14381/remove-item-from-array-with-jquery/
JQuery ile aşağıdaki gibi tek satırlı bir işlem yapabilirsiniz:
Örnek: http://jsfiddle.net/HWKQY/
y.splice( $.inArray(removeItem, y), 1 );
Yerli .splice()ve jQuery'leri kullanır $.inArray().
whiledöngü ve bunun gibi geçici bir değişken kullanın :var found; while ((found = $.inArray(removeItem, y)) !== -1) y.splice(found, 1);
jQuery.filteryöntem yararlıdır. Bu Arraynesneler için kullanılabilir .
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'da:
let values = [1,2,3,4,5];
let evens = values.filter(v => v % 2 == 0);
alert(evens);
Underscore.js dosyasını kullanabilirsiniz . Gerçekten işleri basitleştirir.
Sizin durumunuzda yazmanız gereken tüm kod -
_.without([1,2,3], 2);
ve sonuç [1,3] olacaktır.
Yazdığınız kodu azaltır.
Bir jQuery yolu değil ama ... Neden daha basit bir yol kullanmıyorsunuz? Aşağıdaki diziden 'c' işaretini kaldır
var a = ['a','b','c','d']
a.splice(a.indexOf('c'),1);
>["c"]
a
["a", "b", "d"]
Ayrıca şunları da kullanabilirsiniz: (Kendime not : Sahip olmadığınız nesneleri değiştirmeyin )
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']
Eklemek daha basita.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)
}
}
}
Kullanım örneği
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]]
Bu prototip işlevini kullanmak için onu kodunuza yapıştırmanız gerekir. Ardından, 'nokta notasyonu' olan herhangi bir diziye uygulayabilirsiniz:
someArr.remove('elem1')
iüzerine yazılmasıdır.
Javascript'te bunu yapmanın yerel bir yolu yoktur. Bunu yapmak için bir kütüphane kullanabilir veya küçük bir işlev yazabilirsiniz: http://ejohn.org/blog/javascript-array-remove/
.Not işlevini şu şekilde kullanabilirsiniz:
var arr = [ 1 , 2 , 3 , 5 , 8];
var searchValue = 2;
var newArr = $(arr).not([searchValue]).get();
searchValue4 olarak değiştirdim , kodu çalıştırdım, sorun tespit edilmedi. Tüm değerler hala mevcuttu @ JulianK
User113716 yanıtımın sürümü. Herhangi bir eşleşme bulunmazsa, onun değeri kaldırır, ki bu iyi değildir.
var y = [1, 2, 3]
var removeItem = 2;
var i = $.inArray(removeItem,y)
if (i >= 0){
y.splice(i, 1);
}
alert(y);
Bu, bir eşleşme bulunursa 1 öğeyi, eşleşme bulunmazsa 0 öğesini kaldırır.
Nasıl çalışır:
valuebir inarraycountdeğerlerin sayısı başlayan indexbiz sadece bir istiyorum böylece, countarasında1//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;
Ekleme ile basit bir çözüm var. W3School ek yeri sözdizimine göre ;
array.splice(index, howmany, item1, ....., itemX)
dizin Gerekli. Hangi konuma öğe ekleneceğini / kaldırılacağını belirten bir tamsayı, Dizinin sonundaki konumu belirtmek için negatif değerleri kullanın
howmany Gerekli. Kaldırılacak öğe sayısı. 0 olarak ayarlanırsa, hiçbir öğe kaldırılmaz
item1, ..., itemX İsteğe bağlı. Diziye eklenecek yeni öğeler
Unutmayın, aşağıdaki js bulunursa verilen diziden bir veya daha fazla eşleşen öğeyi açar, aksi takdirde dizinin son öğesini kaldırmaz.
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;
Veya
var itemsFound = $.grep(x, function (elem) {
return elem == item;
}).length;
Yani final aşağıdaki gibi olmalı
x.splice( startItemIndex , itemsFound );
Bu yardımcı olur umarım.
İlk önce öğenin dizide olup olmadığını kontrol eder
$.inArray(id, releaseArray) > -1
yukarıdaki satır dizide varsa o öğenin dizinini döndürür, aksi takdirde -1 döndürür
releaseArray.splice($.inArray(id, releaseArray), 1);
Şimdi satırın yukarısında ise bu öğeyi diziden kaldırır. Aşağıdaki mantığı özetlemek için öğeyi diziden kontrol etmek ve kaldırmak için gerekli kod vardır.
if ($.inArray(id, releaseArray) > -1) {
releaseArray.splice($.inArray(id, releaseArray), 1);
}
else {
releaseArray.push(id);
}
Dizideki nesnelerin bir özelliğine dayalı olarak aynı anda birden çok nesneyi silmek için gereken benzer bir görev vardı.
Bu yüzden birkaç tekrardan sonra:
list = $.grep(list, function (o) { return !o.IsDeleted });
Array sınıfını aşağıdaki pick_and_remove()gibi bir işlevle genişletirim :
var ArrayInstanceExtensions = {
pick_and_remove: function(index){
var picked_element = this[index];
this.splice(index,1);
return picked_element;
}
};
$.extend(Array.prototype, ArrayInstanceExtensions);
Biraz ayrıntılı görünse de, artık pick_and_remove() istediğiniz diziyi !
Kullanımı:
array = [4,5,6] //=> [4,5,6]
array.pick_and_remove(1); //=> 5
array; //=> [4,6]
Tüm bunları burada pokemon temalı eylemde görebilirsiniz.
/** 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;
}
Daha sonra işlevi kodunuzun herhangi bir yerine çağırabilirsiniz.
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"!
Bu her durumda çalışır ve yukarıdaki yöntemlerde problemleri önler. Umarım yardımcı olur!
Bunu dene benim için çalışıyor
_clientsSelected = ["10", "30", "12"];
function (removeItem) {
console.log(removeItem);
_clientsSelected.splice($.inArray(removeItem, _clientsSelected), 1);
console.log(_clientsSelected);
`enter code here`},
Burada en çok oylanan ikinci cevap, OP'nin istediği amaçlanan bir tek katlı jQuery yöntemine mümkün olan en yakın yolda, ancak kodlarının sonunda tökezledi ve bir kusuru var. Kaldırılacak öğeniz aslında dizide yoksa, son öğe kaldırılır.
Birkaç kişi bu sorunu fark etti ve bazıları buna karşı korunmak için döngü kurmayı önerdi. Bulabildiğim en kısa, en temiz yöntemi sunuyoruz ve bu yönteme göre kodlarını düzeltmenin yolu için kendi cevapları altında yorum yaptım.
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 dizisi "bye" öğesini kolayca kaldıracak ve y dizisi dokunulmayacaktır.
Argümanın $.inArray(removeItem,array)ikinci bir argüman olarak kullanılması aslında birleşme uzunluğu olarak sonuçlanır. Öğe bulunamadığı için, bu değerlendirilir array.splice(-1,-1);, bu da hiçbir şeyin birleştirilmesine neden olmaz ... hepsi bunun için bir döngü yazmak zorunda kalmadan.
Vanilya JavaScript kullanarak 2 diziden güvenle kaldırmak için:
// 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]
Çoklu dolgu kaynağı: Mozilla
Sadece Sarfraz'ın cevabına eklemek için, kimsenin henüz bir işlevi yerine getirmediğini şaşırttı.
Dizinizde birden çok aynı değere sahipseniz, .filter yöntemini kullanarak ddagsan'ın yanıtını kullanın.
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>