У меня есть массив, который выглядит так: 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()
.
Вы можете использовать underscore.js. Это действительно упрощает процесс.
В этом случае код, который вам нужно сделать, -
_.without([1,2,3], 2);
и результат будет [1,3].
Он уменьшает код, который вы пишете.
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/
В Экстракте 6:
let values = [1,2,3,4,5];
let evens = values.filter(v => v % 2 == 0);
alert(evens);
Не путь 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')
Удалить элемент в массиве
var arr = ["jQuery", "JavaScript", "HTML", "Ajax", "Css"];
var itemtoRemove = "HTML";
arr.splice($.inArray(itemtoRemove, arr), 1);
В Javascript нет собственного способа сделать это. Вы можете использовать библиотеку или написать небольшую функцию, чтобы сделать это вместо: http://ejohn.org/blog/javascript-array-remove/
Вы можете использовать .not такую функцию:
var arr = [ 1 , 2 , 3 , 5 , 8];
var searchValue = 2;
var newArr = $(arr).not([searchValue]).get();
searchValue
на 4, запустил код, проблем не обнаружено. Все значения все еще присутствовали. @ JulianK
//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)
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 );
Надеюсь, что это поможет.
/** 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"!
Это работает во всех случаях и позволяет избежать проблем в вышеприведенных методах. Надеюсь, что это поможет!
Я бы расширил класс 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 здесь.
У меня была аналогичная задача, когда мне нужно было удалить сразу несколько объектов на основе свойства объектов в массиве.
Итак, после нескольких итераций я получаю:
list = $.grep(list, function (o) { return !o.IsDeleted });
Чтобы безопасно удалить 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
Моя версия 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
используя простой javascript, вы можете использовать это:
Array.remove('Valuetoberemoved');
ex: y.remove('2');
или это: