最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Remove a range of elements from an array - Stack Overflow

programmeradmin4浏览0评论

I want to remove a range of elements from an array:

var fruits = ["Banana", "Orange1", "Apple", "Banana", "Orange", "Banana", "Orange", "Mango", "Bananax", "Orangex"];
var a = fruits.indexOf("Apple");
var b = fruits.indexOf("Mango");

var removedCars = fruits.splice(a, b);

console.log(fruits);

I want to remove a range of elements from an array:

var fruits = ["Banana", "Orange1", "Apple", "Banana", "Orange", "Banana", "Orange", "Mango", "Bananax", "Orangex"];
var a = fruits.indexOf("Apple");
var b = fruits.indexOf("Mango");

var removedCars = fruits.splice(a, b);

console.log(fruits);

So I am expecting:

["Banana", "Orange1", "Bananax", "Orangex"]

But the result is:

["Banana", "Orange1", "Orangex"]

Why is this happening?

Are there any faster and better ways of doing this?

Share Improve this question edited Jan 7, 2020 at 11:14 cнŝdk 32.1k7 gold badges60 silver badges80 bronze badges asked Sep 13, 2017 at 13:18 RunRun 57.2k177 gold badges462 silver badges771 bronze badges 2
  • 5 You are not using the splice function correctly. The first parameter defines number of items, while the second is the start index. – Leth Commented Sep 13, 2017 at 13:20
  • 7 array.splice(start, deleteCount) That second parameter isn't an index. – Cerbrus Commented Sep 13, 2017 at 13:20
Add a comment  | 

3 Answers 3

Reset to default 16

The second param of Array.prototype.splice() is the number of elements to be removed and not an ending index.

You can see from the Array.prototype.splice() MDN Reference that:

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 (with origin 1) and will be set to 0 if absolute value is greater than the length 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.

Solution:

You need to calculate the number of elements between these two indexes, so use (b - a) + 1 to get the correct count.

Demo:

This is your code with the proper usage of splice:

var fruits = ["Banana", "Orange1", "Apple", "Banana", "Orange", "Banana", "Orange", "Mango", "Bananax", "Orangex"];
var a = fruits.indexOf("Apple");
var b = fruits.indexOf("Mango");

var removedFruits = fruits.splice(a, (b - a) + 1);

console.log(fruits);

Here's one way to do it with filter:

var fruits = ["Banana", "Orange1", "Apple", "Banana", "Orange", "Banana", "Orange", "Mango", "Bananax", "Orangex"];
var a = fruits.indexOf("Apple");
var b = fruits.indexOf("Mango");

//returns items not equal to a or b
function fruitfilter(item, index){
return index !== a && index !== b;
}

//apply the filter to the array, returns a new array
var newfruits = fruits.filter(fruitfilter);
 //log the new fruits
console.log(newfruits);

Here's a jsfiddle: link

That happens because array.splice() take the first index and the number of elements you want to delete not the last index try that

fruits.splice(a, b - a + 1);
发布评论

评论列表(0)

  1. 暂无评论