Jquery версия array.contains
Может ли jQuery проверить массив на наличие объекта (либо как часть функциональности ядра, либо через доступный плагин)?
Кроме того, я ищу что-то вроде array.remove
, которое удалит данный объект из массива. Может ли jQuery обрабатывать это для меня?
Ответы
Ответ 1
jQuery.inArray возвращает первый индекс, который соответствует элементу, который вы искали, или -1, если он не найден:
if($.inArray(valueToMatch, theArray) > -1) alert("it in there");
Вам не нужен массив. Используйте сращивание:
theArray.splice(startRemovingAtThisIndex, numberOfItemsToRemove);
Или вы можете выполнить "удалить", используя jQuery.grep:
var valueToRemove = 'someval';
theArray = $.grep(theArray, function(val) { return val != valueToRemove; });
Ответ 2
Если ваш список содержит список элементов, вы можете использовать jQuery.not или jQuery.filter, чтобы выполнить ваш "array.remove". (Ответ добавлен из-за высокой оценки google вашего исходного вопроса).
Ответ 3
Я нашел способ удалить объект:
foot = { bar : 'test'};
delete foot[bar];
Ответ 4
Это не jQuery, но в одной строке вы можете добавить удобный метод 'contains' для массивов. Я считаю, что это помогает с удобочитаемостью (особенно для python folk).
Array.prototype.contains = function(a){ return this.indexOf(a) != -1 }
пример использования
> var a = [1,2,3]
> a.contains(1)
true
> a.contains(4)
false
Аналогично для удаления
Array.prototype.remove = function(a){if (this.contains(a)){ this.splice(this.indexOf(a),1)}; return this}
> var a = [1,2,3]
> a.remove(2)
[1,3]
Или, если вы хотите, чтобы оно удаляло вещь, а не измененный массив, тогда
Array.prototype.remove = function(a){if (this.contains(a)){ return this.splice(this.indexOf(a),1)}}
> var a = [1,2,3]
> a.remove(2)
[2]
> a
[1,3]