Удаление элементов массива в JavaScript - удаление против сращивания - PullRequest
1277 голосов
/ 01 февраля 2009

В чем разница между использованием оператора delete в элементе массива и использованием метода Array.splice ?

Например:

myArray = ['a', 'b', 'c', 'd'];

delete myArray[1];
//  or
myArray.splice (1, 1);

Зачем даже метод сращивания, если я могу удалять элементы массива, как я могу с объектами?

Ответы [ 24 ]

0 голосов
/ 21 августа 2017

Для тех, кто хочет использовать Лодаш может использовать: myArray = _.without(myArray, itemToRemove)

или как я использую в Angular2

import { without } from 'lodash';
...
myArray = without(myArray, itemToRemove);
...
0 голосов
/ 17 марта 2014
function deleteFromArray(array, indexToDelete){
  var remain = new Array();
  for(var i in array){
    if(array[i] == indexToDelete){
      continue;
    }
    remain.push(array[i]);
  }
  return remain;
}

myArray = ['a', 'b', 'c', 'd'];
deleteFromArray(myArray , 0);

// результат: myArray = ['b', 'c', 'd'];

0 голосов
/ 11 января 2015

IndexOf принимает также тип ссылки. Предположим, следующий сценарий:

var arr = [{item: 1}, {item: 2}, {item: 3}];
var found = find(2, 3); //pseudo code: will return [{item: 2}, {item:3}]
var l = found.length;

while(l--) {
   var index = arr.indexOf(found[l])
      arr.splice(index, 1);
   }
   
console.log(arr.length); //1

Иными словами:

var item2 = findUnique(2); //will return {item: 2}
var l = arr.length;
var found = false;
  while(!found && l--) {
  found = arr[l] === item2;
}

console.log(l, arr[l]);// l is index, arr[l] is the item you look for
0 голосов
/ 13 декабря 2015

Если нужный элемент находится посередине (скажем, мы хотим удалить 'c', индекс которого равен 1), вы можете использовать:

var arr = ['a','b','c'];
var indexToDelete = 1;
var newArray = arr.slice(0,indexToDelete).combine(arr.slice(indexToDelete+1, arr.length))
...