Как удалить элемент из массива по значению? - PullRequest
778 голосов
/ 17 октября 2010

Есть ли способ удалить элемент из массива JavaScript?

Учитывая массив:

var ary = ['three', 'seven', 'eleven'];

Я хотел бы сделать что-то вроде:

removeItem('seven', ary);

Я посмотрел на splice(), но это удаляет только по номеру позиции, тогда как мне нужно что-то, чтобы удалить элемент по его значению.

Ответы [ 35 ]

0 голосов
/ 28 июня 2018

В глобальной функции мы не можем напрямую передать пользовательское значение, но есть много способов, как показано ниже

 var ary = ['three', 'seven', 'eleven'];
 var index = ary.indexOf(item);//item: the value which you want to remove

 //Method 1
 ary.splice(index,1);

 //Method 2
 delete ary[index]; //in this method the deleted element will be undefined
0 голосов
/ 13 сентября 2013

CoffeeScript + jQuery вариант:

arrayRemoveItemByValue = (arr,value) ->
  r=$.inArray(value, arr)
  unless r==-1
    arr.splice(r,1)
  # return
  arr

console.log arrayRemoveItemByValue(['2','1','3'],'3')

удаляется только один, а не все.

0 голосов
/ 29 января 2014
//This function allows remove even array from array
var removeFromArr = function(arr, elem) { 
    var i, len = arr.length, new_arr = [],
    sort_fn = function (a, b) { return a - b; };
    for (i = 0; i < len; i += 1) {
        if (typeof elem === 'object' && typeof arr[i] === 'object') {
            if (arr[i].toString() === elem.toString()) {
                continue;
            } else {                    
                if (arr[i].sort(sort_fn).toString() === elem.sort(sort_fn).toString()) {
                    continue;
                }
            }
        }
        if (arr[i] !== elem) {
            new_arr.push(arr[i]);
        }
    }
    return new_arr;
}

Пример использования

var arr = [1, '2', [1 , 1] , 'abc', 1, '1', 1];
removeFromArr(arr, 1);
//["2", [1, 1], "abc", "1"]

var arr = [[1, 2] , 2, 'a', [2, 1], [1, 1, 2]];
removeFromArr(arr, [1,2]);
//[2, "a", [1, 1, 2]]
0 голосов
/ 05 апреля 2014

Другой вариант:

if (!Array.prototype.removeArr) {
    Array.prototype.removeArr = function(arr) {
        if(!Array.isArray(arr)) arr=[arr];//let's be nice to people who put a non-array value here.. that could be me!
        var that = this;
        if(arr.length){
            var i=0;
            while(i<that.length){
                if(arr.indexOf(that[i])>-1){
                    that.splice(i,1);
                }else i++;
            }
        }
        return that;
    }
}

Это снова indexOf () внутри цикла, но при условии, что удаляемый массив мал по сравнению с очищаемым массивом;каждое удаление сокращает цикл while.

0 голосов
/ 18 ноября 2016

Вы можете использовать Функция извлечения lodash

var ary = ['three', 'seven', 'eleven'];
_.pull(ary, 'seven'); // ['three', 'eleven']
console.log(ary)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...