У меня есть массив, который выглядит так: 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()
.
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')
Удалить элемент в массиве
var arr = ["jQuery", "JavaScript", "HTML", "Ajax", "Css"];
var itemtoRemove = "HTML";
arr.splice($.inArray(itemtoRemove, arr), 1);
//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')
В 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;
Вы можете использовать .not такую функцию:
var arr = [ 1 , 2 , 3 , 5 , 8];
var searchValue = 2;
var newArr = $(arr).not([searchValue]).get();
Существует простое решение с сращиванием. Согласно W3School последовал синтаксис сплайсинга;
array.splice(index, howmany, item1, ....., itemX)
index Требуется. Целое число, указывающее, в какую позицию добавлять/удалять элементы. Используйте отрицательные значения для указания позиции из конца массива
howmany Требуется. Количество элементов для удаления. Если установлено значение 0, элементы не будут удалены.
item1,..., itemX Дополнительно. Новый элемент (ы), который будет добавлен в массив
Имейте это в виду, следующие js будут вытаскивать один или несколько совпадающих элементов из заданного массива, если они найдены, в противном случае не будет удаляться последний элемент массива.
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 );
Надеюсь, что это поможет.
У меня была аналогичная задача, когда мне нужно было удалить сразу несколько объектов на основе свойства объектов в массиве.
Итак, после нескольких итераций я получаю:
list = $.grep(list, function (o) { return !o.IsDeleted });
Я бы расширил класс 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]
Вы можете увидеть все это в pokemon-themed action здесь.
/** 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"!
Это работает во всех случаях и позволяет избежать проблем в вышеприведенных методах. Надеюсь, что это поможет!
Сначала проверяет, существует ли элемент в массиве
$.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);
}
Чтобы безопасно удалить 2 из массива с помощью ванильного JavaScript:
// 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]
Polyfill источник: Mozilla
Попробуйте, это работает для меня
_clientsSelected = ["10", "30", "12"];
function (removeItem) {
console.log(removeItem);
_clientsSelected.splice($.inArray(removeItem, _clientsSelected), 1);
console.log(_clientsSelected);
'enter code here'},
используя простой javascript, вы можете использовать это:
Array.remove('Valuetoberemoved');
ex: y.remove('2');
или это: