user7199461
user7199461

Reputation:

Splice delete the last element

I am trying to delete an element of an array with splice, but .splice is deleting the last element all the time. The index that I am passing is correct. What am I doing wrong?

$scope.deleteSingleAnswer = function (index) {
  console.log(index);
  console.log($scope.editAnswers);
  $scope.editAnswers.splice(index);
  console.log($scope.editAnswers);
}; 

Upvotes: 1

Views: 1613

Answers (3)

Kashif Sulehria
Kashif Sulehria

Reputation: 77

use the filter method if you have id of every element.

const newArr = arrayOfObjects.filter((id) => {
  return id !== 4;
})

It will give you a new array without 4.

Upvotes: 0

Ghazanfar Khan
Ghazanfar Khan

Reputation: 3718

You need to specify how many elements to delete after that particular index. see here

The splice() method changes the content of an array by removing existing elements and/or adding new elements.

var myFish = ["angel", "clown", "mandarin", "surgeon"];
myFish.splice(2, 0, "drum");

Syntax

array.splice(start)
array.splice(start, deleteCount)
array.splice(start, deleteCount, item1, item2, ...)

Parameters

start Index at which to start changing the array (with origin 0). If greater than the length of the array, actual starting index will be set to the length of the array. If negative, will begin that many elements from the end of the array.

deleteCount Optional

An integer indicating the number of old array elements to remove. If deleteCount is 0, no elements are removed. In this case, you should specify at least one new element. If deleteCount is greater than the number of elements left in the array starting at start, then all of the elements through the end of the array will be deleted. If deleteCount is omitted, deleteCount will be equal to (arr.length - start). item1, item2, ... Optional The elements to add to the array, beginning at the start index. If you don't specify any elements, splice() will only remove elements from the array.

Upvotes: 1

rfornal
rfornal

Reputation: 5122

Try this ...

$scope.deleteSingleAnswer = function (index) {
  console.log(index);
  console.log($scope.editAnswers);
  $scope.editAnswers.splice(index, 1);
  console.log($scope.editAnswers);
}; 

Specify how many to remove with .splice or it will remove from index to the end of the array.

From MDN:

array.splice(start)
array.splice(start, deleteCount)
array.splice(start, deleteCount, item1, item2, ...)

If deleteCount is omitted, deleteCount will be equal to (arr.length - start).

Upvotes: 1

Related Questions