Как удалить объект из массива с помощью JavaScript? - PullRequest
48 голосов
/ 03 августа 2010

У меня есть объект JavaScript, подобный этому:

id="1";
name = "serdar";

, и у меня есть массив, который содержит много объектов выше.Как я могу удалить объект из этого массива, например, так:

obj[1].remove();

Ответы [ 13 ]

137 голосов
/ 03 августа 2010

Ну splice работает:

var arr = [{id:1,name:'serdar'}];
arr.splice(0,1);
// []

НЕ используйте оператор delete для массивов.

Но, может быть, вы хотите что-то подобное?

var removeByAttr = function(arr, attr, value){
    var i = arr.length;
    while(i--){
       if( arr[i] 
           && arr[i].hasOwnProperty(attr) 
           && (arguments.length > 2 && arr[i][attr] === value ) ){ 

           arr.splice(i,1);

       }
    }
    return arr;
}

Просто пример ниже.

var arr = [{id:1,name:'serdar'}, {id:2,name:'alfalfa'},{id:3,name:'joe'}];
removeByAttr(arr, 'id', 1);   
// [{id:2,name:'alfalfa'}, {id:3,name:'joe'}]

removeByAttr(arr, 'name', 'joe');
// [{id:2,name:'alfalfa'}]
44 голосов
/ 11 октября 2016

Если у вас есть доступ к функциям ES2015, и вы ищете более функциональный подход, я бы выбрал что-то вроде:

const people = [
  { id: 1, name: 'serdar' },
  { id: 5, name: 'alex' },
  { id: 300, name: 'brittany' }
];

const idToRemove = 5;

const filteredPeople = people.filter((item) => item.id !== idToRemove);

// [
//   { id: 1, name: 'serdar' },
//   { id: 300, name: 'brittany' }
// [

Обратите внимание, что filter() не является мутирующим, поэтому вы получите новый массив обратно.

См. Примечания к сети разработчиков Mozilla для фильтра .

22 голосов
/ 03 августа 2010

Вы можете использовать либо метод splice(), либо оператор delete.

Основное отличие состоит в том, что при удалении элемента массива с помощью оператора delete длина массива не изменяется, даже если вы удаляете последний элемент массива. С другой стороны, метод splice() смещает все элементы так, чтобы на месте удаленного элемента не оставалось отверстий.

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

var trees = ["redwood", "bay", "cedar", "oak", "maple"];  
delete trees[3];  
if (3 in trees) {  
   // this does not get executed  
}
console.log(trees.length);  //  5
console.log(trees);         //  ["redwood", "bay", "cedar", undefined, "maple"]

Пример использования метода splice():

var trees = ["redwood", "bay", "cedar", "oak", "maple"];  
trees.splice(3, 1);
console.log(trees.length);  //  4
console.log(trees);         //  ["redwood", "bay", "cedar", "maple"]
9 голосов
/ 09 ноября 2015

Я использую это совсем немного, поэтому я создал небольшой прототип.Просто ищет предмет, а затем вытаскивает его, если есть совпадение.

//Prototype to remove object from array, removes first
//matching object only
Array.prototype.remove = function (v) {
    if (this.indexOf(v) != -1) {
        this.splice(this.indexOf(v), 1);
        return true;
    }
    return false;
}

Можно назвать как:

var arr = [12, 34, 56];
arr.remove(34);

Результат будет [12, 56]

Возвращает логическое значение в случае успешного удаления, значение false, если элемент не существует.

4 голосов
/ 03 августа 2010

Если вы знаете индекс, который имеет объект в массиве, тогда вы можете использовать splice (), как уже упоминали другие, например:

var removedObject = myArray.splice(index,1);
removedObject = null;

Если вы не знаете индекс, тогда вам нужноискать в массиве, например:

for (var n = 0 ; n < myArray.length ; n++) {
    if (myArray[n].name == 'serdar') {
      var removedObject = myArray.splice(n,1);
      removedObject = null;
      break;
    }
}

Marcelo

1 голос
/ 31 мая 2017

var arr = [{id:1,name:'serdar'}, {id:2,name:'alfalfa'},{id:3,name:'joe'}];
var ind = arr.findIndex(function(element){
   return element.id===2;
})
if(ind!==-1){
arr.splice(ind, 1)
}
console.log (arr)

Обратите внимание, что метод findIndex не поддерживается в Internet Explorer, но полифил можно использовать с здесь

1 голос
/ 12 мая 2015
  //K.I.S.S. method
  //(the setup/comments is/are longer than the code)
  //cards is a two dimensional array object
  //  has an array object with 4 elements at each first dimensional index
  //var cards = new Array()
  //cards[cards.length] = new Array(name, colors, cost, type)
  //Can be constructed with Associated arrays, modify code as needed.
  //my test array has 60 'cards' in it
  //  15 'cards' repeated 4 times each
  //  groups were not sorted prior to execution
  //  (I had 4 groups starting with 'U' before the first 'A')
  //Should work with any dimensionality as long as first
  //index controls sort order

  //sort and remove duplicates
  //Algorithm:
  //  While same name side by side, remove higher entry;
  //  assumes 'cards' with same name have same other data
  //  (otherwise use cards[i-1] === cards[i] to compare array objects).
  //Tested on IE9 and FireFox (multiple version #s from 31 up).
  //Also tested by importing array data from 5MB text file.
  //Quick execution
  cards.sort()
  for (i=1; i<cards.length-1; i++){
    while (cards[i-1][0] == cards[i][0]){
       cards.splice(i,1)
    }
  }
0 голосов
/ 08 декабря 2017

var apps = [{id: 34, имя: «Мое приложение», другое: «вещь»}, {id: 37, имя: «Мое новое приложение», другое: «вещи»}];

// получить индекс объекта с id: 37

var removeIndex = apps.map (function (item) {return item.id;}). IndexOf (37);

// удалить объект

apps.splice (removeIndex, 1);

0 голосов
/ 29 ноября 2017
var user = [
  { id: 1, name: 'Siddhu' },
  { id: 2, name: 'Siddhartha' },
  { id: 3, name: 'Tiwary' }
];

var recToRemove={ id: 1, name: 'Siddhu' };

user.splice(user.indexOf(recToRemove),1)
0 голосов
/ 03 августа 2010

Если это последний элемент в массиве, вы можете сделать obj.pop()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...