I have an array of integers, which I'm using the .push() method to add to.

Is there a simple way to remove a specific element from an array? The equivalent of something like array.remove(int);.

I have to use core JavaScript - no frameworks are allowed.

share|improve this question
46  
If you need to support <IE9 (sigh) then check this SO question regarding indexOf in IE. – Scotty.NET Sep 13 '13 at 7:48
3  
(lodash) array = ['a', 'b', 'c']; _.pull(array, 'a') // array => ['b', 'c']; See also stackoverflow.com/questions/5767325/… – Chun Yang Aug 25 '15 at 20:28
1  
filter method can do what you want. – Salvador Dali Sep 5 '15 at 23:43
1  
You can use delete but it will not rearange the index instead it will set this slot to 'undefined × 1'. For example: var list = [1,2,3,4,5,6] -> delete list[1] -> [1, undefined × 1, 3, 4, 5, 6]. – DevWL May 24 '16 at 23:26
2  
delete should be more performant in the short term, because it won't have to shift the later items. forEach, map and filter will automatically skip processing for undefined (deleted) items. But it's probably not ideal if you will be adding a lot of things to your array in future, or reading it many times. – joeytwiddle Jul 29 '16 at 8:55

46 Answers 46

up vote 6208 down vote accepted

First, find the index of the element you want to remove:

var array = [2, 5, 9];
var index = array.indexOf(5);

Note: browser support for indexOf is limited; it is not supported in Internet Explorer 7 and 8.

Then remove it with splice:

if (index > -1) {
    array.splice(index, 1);
}

The second parameter of splice is the number of elements to remove. Note that splice modifies the array in place and returns a new array containing the elements that have been removed.


If you need indexOf in an unsupported browser, try the following polyfill. Find more info about this polyfill here.

Array.prototype.indexOf || (Array.prototype.indexOf = function(d, e) {
    var a;
    if (null == this) throw new TypeError('"this" is null or not defined');
    var c = Object(this),
        b = c.length >>> 0;
    if (0 === b) return -1;
    a = +e || 0;
    Infinity === Math.abs(a) && (a = 0);
    if (a >= b) return -1;
    for (a = Math.max(0 <= a ? a : b - Math.abs(a), 0); a < b;) {
        if (a in c && c[a] === d) return a;
        a++
    }
    return -1
});
share|improve this answer
119  
Good solution, but some browsers don't suppoer array.indexOf – Peter Olson Apr 23 '11 at 22:25
156  
The second argument to the splice function is how many elements to remove. – Tom Wadley Apr 23 '11 at 22:25
53  
array.indexOf is not supported in IE8 or earlier (see w3schools.com/jsref/jsref_indexof_array.asp). jQuery.inArray() works similarly though (api.jquery.com/jQuery.inArray) – Jon Onstott May 17 '13 at 17:15
47  
Dangerous! If you are working with dynamic values (add and remove dynamic values from array) and value is not exist in array (the index become -1) the code above will remove the last element of the array. – Adrian P. Sep 6 '13 at 16:44
10  
@AlexandreWiechersVaz Of course it preserves order, if it didn't then it would be absolutely worthless – TheZ Dec 11 '13 at 19:18

I don't know how you are expecting array.remove(int) to behave. There are three possibilities I can think of that you might be wanting.

To remove an element of an array at an index i:

array.splice(i, 1);

If you want to remove every element with value number from the array:

for(var i = array.length - 1; i >= 0; i--) {
    if(array[i] === number) {
       array.splice(i, 1);
    }
}

If you just want to make the element at index i no longer exist, but you don't want the indexes of the other elements to change:

delete array[i];
share|improve this answer
163  
delete is not the correct way to remove an element from an array! – Felix Kling Jan 27 '13 at 15:30
43  
@FelixKling It depends, it works if you want to make it so that array.hasOwnProperty(i) returns false and have the element at that position return undefined. But I'll admit that that's not a very common thing to want to do. – Peter Olson Jan 27 '13 at 15:36
52  
delete will not update the length of the array neither really erases the element, only replaces it with the special value undefined. – diosney Feb 17 '13 at 3:44
19  
@diosney I don't know what you mean when you say it doesn't really erase the element. Further, it does more than simply replacing the value at that index with undefined: it removes both the index and the value from the array, i.e. after delete array[0], "0" in array will return false. – Peter Olson Apr 15 '13 at 19:13
5  
for(var i=array.length; i>=0; i--) should be for(var i=array.length-1; i>=0; i--) because indexing starts at 0 (there is no element at array[array.length]) – Bambax May 23 '13 at 18:04

Depends on whether you want to keep an empty spot or not.

If you do want an empty slot, delete is fine:

delete array[ index ];

If you don't, you should use the splice method:

array.splice( index, 1 );

And if you need the value of that item, you can just store the returned array's element:

var value = array.splice( index, 1 )[0];

In case you want to do it in some order, you can use array.pop() for the last one or array.shift() for the first one (and both return the value of the item too).

And if you don't know the index of the item, you can use array.indexOf( item ) to get it (in a if() to get one item or in a while() to get all of them). array.indexOf( item ) returns either the index or -1 if not found. 

share|improve this answer
39  
It's worth noting that var value will not store the removed value but an array containing the removed value. – Jakub Jul 10 '13 at 9:55
12  
delete is not the correct way to remove an element from an array!! – Progo Jul 4 '14 at 14:20
8  
If you want to "empty a slot", use array[index] = undefined;. Using delete will destroy optimisation. – Bergi Aug 11 '14 at 16:40
3  
@Jakub very good comment because to understand that I lost much time and thought my application code is somehow broken... – Pascal Dec 14 '14 at 19:14

Edited on 2016 october

In this code example I use "array.filter(...)" function to remove unwanted items from array, this function doesn't change the original array and creates a new one. If your browser don't support this function (e.g. IE before version 9, or Firefox before version 1.5), consider using the filter polyfill from Mozilla.

ECMAScript 5 code

var value = 3;

var arr = [1, 2, 3, 4, 5, 3];

arr = arr.filter(function(item) { 
    return item !== value;
});

console.log(arr); 
// [ 1, 2, 4, 5 ]

ECMAScript 6 code

let value = 3;

let arr = [1, 2, 3, 4, 5, 3];

arr = arr.filter(item => item !== value);

console.log(arr); 
// [ 1, 2, 4, 5 ]

Removing multiple items (ES6 code)

An additional advantage of this method is that you can remove multiple items

let valuesToDelete = [2, 3, 5];

let arr = [1, 2, 3, 4, 5, 3];

arr = arr.filter(item => valuesToDelete.indexOf(item) === -1);

console.log(arr); 
// [ 1, 4 ]

IMPORTANT "array.indexOf(...)" function is not supported in IE before 9 version and Firefox before 1.5 version, so here is polyfill from Mozilla

Removing multiple items (Cutting-edge experimental JavaScript)

// functional composition
const not = fn => val => !fn(val)

let forDeletion = [2, 3, 5]

let arr = [1, 2, 3, 4, 5, 3]

// :: This-Binding Syntax Proposal
arr = arr.filter(not(::forDeletion.includes))

console.log(arr)
// [ 1, 4 ]

Reference

share|improve this answer
    
but, sometimes we want to remove element from original array(non immutable), for example array used in Angular 2 *ngFor directive – Ravinder Payal Feb 8 at 14:06
1  
Better than the accepted solution because it does not assume only one occurrence of a match and immutability is preferable – Greg Mar 6 at 16:46
1  
Using filter is so much nicer than using splice. Too simple. – user3344977 Mar 17 at 22:22

A friend was having issues in Internet Explorer 8, and showed me what he did. I told him it was wrong, and he told me he got the answer here. The current top answer will not work in all browsers (Internet Explorer 8 for example), and it will only remove the first occurrence of the item.

Remove ALL instances from an array

  function remove(arr, item) {
      for(var i = arr.length; i--;) {
          if(arr[i] === item) {
              arr.splice(i, 1);
          }
      }
  }

It loops through the array backwards (since indices and length will change as items are removed) and removes the item if it's found. It works in all browsers.

share|improve this answer
8  
@sroes it should not be because the loop starts at i = arr.length -1 or i-- making it same as the max index. arr.length is just an initial value for i. i-- will always be truthy (and reducing by 1 at each loop op) until it equals 0 (a falsy value) and the loop will then stop. – gabeno Jan 29 '14 at 20:06
1  
Second function is rather inefficient. On every iteration "indexOf" will start search from beginning of array. – Ujeenator Feb 25 '15 at 13:32
    
@AmberdeBlack, you're exactly right. Surprised I didn't catch that when I answered: jsperf.com/remove-all-from-array – Ben Lesh Mar 3 '15 at 3:12
1  
@AlJey, it's available only from IE9+. There is still a chance that it wouldn't work. – Ujeenator Mar 30 '15 at 16:23
1  
This answer worked for me because I needed several items removed but not in any particular order. The backwards progression of the for loop here handles removing items from the array perfectly. – mintedsky Jul 14 '15 at 23:39

The easiest way:

var index = array.indexOf(item);
if(index != -1)
    array.splice( index, 1 );
share|improve this answer

There are two major posibilities:

  1. splice(): anArray.splice(index, 1);

  2. delete: delete anArray[index];

Be careful when you use delete for an array. It is good for deleting attributes of objects but not so good for arrays. It is better to use splice for arrays.

Keep in mind that when you use delete for an array you could get wrong results for anArray.length. In other words, delete would remove the element but wouldn't update the value of length property.

You can also expect to have holes in index numbers after using delete, e.g. you could end up with having indexes 1,3,4,8,9,11 and length as it was before using delete. In that case, all indexed for loops would crash, since indexes are no longer sequential.

If you are forced to use delete for some reason, then you should use for each loops when you need to loop through arrays.

share|improve this answer
Array.prototype.remByVal = function(val) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] === val) {
            this.splice(i, 1);
            i--;
        }
    }
    return this;
}
//Call like
[1, 2, 3, 4].remByVal(3);
share|improve this answer
11  
I'm not a big fan of this approach. If you end up using different libraries or frameworks, they can end up conflicting with each other. – Charlie Kilian Apr 23 '11 at 22:30
    
This worked as well, I chose to go with the indexOf function in the end though. Thanks for the help! – Walker Apr 23 '11 at 22:35
9  
Bad idea, see this post: stackoverflow.com/questions/948358/array-prototype-problem – MMeah Jul 9 '12 at 22:10
8  
If you're doing a for in on an array, you already have a problem. – Zirak May 14 '14 at 13:01

There is no need to use indexOf or splice. However, it performs better if you only want to remove one occurrence of an element.

Find and move (move):

function move(arr, val) {
  var j = 0;
  for (var i = 0, l = arr.length; i < l; i++) {
    if (arr[i] !== val) {
      arr[j++] = arr[i];
    }
  }
  arr.length = j;
}

Use indexOf and splice (indexof):

function indexof(arr, val) {
  var i;
  while ((i = arr.indexOf(val)) != -1) {
    arr.splice(i, 1);
  }
}

Use only splice (splice):

function splice(arr, val) {
  for (var i = arr.length; i--;) {
    if (arr[i] === val) {
      arr.splice(i, 1);
    }
  }
}

Run-times on nodejs for array with 1000 elements (average over 10000 runs):

indexof is approximately 10x slower than move. Even if improved by removing the call to indexOf in splice it performs much worse than move.

Remove all occurrences:
    move 0.0048 ms
    indexof 0.0463 ms
    splice 0.0359 ms

Remove first occurrence:
    move_one 0.0041 ms
    indexof_one 0.0021 ms
share|improve this answer
1  
Looks like the 'move' method presented here should work in all browsers, and also avoids creating an extra array; most other solutions here have one or both of these problems. I think this one deserves a lot more votes, even if it doesn't look as "pretty". – sockmonk Jul 29 '15 at 11:50

John Resig posted a good implementation:

// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

If you don’t want to extend a global object, you can do something like the following, instead:

// Array Remove - By John Resig (MIT Licensed)
Array.remove = function(array, from, to) {
    var rest = array.slice((to || from) + 1 || array.length);
    array.length = from < 0 ? array.length + from : from;
    return array.push.apply(array, rest);
};

But the main reason I am posting this is to warn users against the alternative implementation suggested in the comments on that page (Dec 14, 2007):

Array.prototype.remove = function(from, to){
  this.splice(from, (to=[0,from||1,++to-from][arguments.length])<0?this.length+to:to);
  return this.length;
};

It seems to work well at first, but through a painful process I discovered it fails when trying to remove the second to last element in an array. For example, if you have a 10-element array and you try to remove the 9th element with this:

myArray.remove(8);

You end up with an 8-element array. Don't know why but I confirmed John's original implementation doesn't have this problem.

share|improve this answer
    
Just learned by the hard way why it is a good idea to use Object.prototype.hasOwnProperty always ¬¬ – Davi Fiamenghi Apr 11 '15 at 4:58

Too old to reply, but may it help someone, by providing a predicate instead of a value.

NOTE: it will update the given array, and return affected rows

Usage

var removed = helper.removeOne(arr, row => row.id === 5 );

var removed = helper.remove(arr, row => row.name.startsWith('BMW'));

Definition

var helper = {

    // Remove and return the first occurrence     

    removeOne: function(array, predicate) {
        for (var i = 0; i < array.length; i++) {
            if (predicate(array[i])) {
                return array.splice(i, 1);
            }
        }
    },

    // Remove and return all occurrences  

    remove: function(array, predicate) {
        var removed = [];

        for (var i = 0; i < array.length;) {

            if (predicate(array[i])) {
                removed.push(array.splice(i, 1));
                continue;
            }

            i++;                
        }

        return removed;
    }
};
share|improve this answer
    
I don't know that you need the -1 check (i > -1). Also, I think these functions act more like filter than remove. If you pass row.id === 5, it will result in an array with only id 5, so it is doing the opposite of remove. It would look nice in ES2015: var result = ArrayHelper.remove(myArray, row => row.id === 5); – What Would Be Cool Sep 20 '15 at 19:42
    
@WhatWouldBeCool this function modify the original array, and return the removed item instead of copying the result to a new array – amd Sep 21 '15 at 7:21

You can do it easily with filter method:

function remove(arrOriginal, elementToRemove){
    return arrOriginal.filter(function(el){return el !== elementToRemove});
}
console.log( remove([1, 2, 1, 0, 3, 1, 4], 1) );

This removes all elements from the array and also works faster then combination of slice and indexOf

share|improve this answer
    
Nice solution but I see one problem and that is it creates new array and doesn't do anything to original array. – Mak Feb 22 '14 at 23:14
    
@Mak you are correct. This indeed creates another array. But if you do not want to do this you can overwrite old one with a new one. – Salvador Dali Feb 22 '14 at 23:17
2  
Also note, Array.prototype.filter is ECMAScript 5.1 (No IE8) – Montana Harkin May 23 '14 at 20:35

Underscore.js can be used to solve issues with multiple browsers. It uses in-build browser methods if present. If they are absent like in the case of older IE it uses its own custom methods.

Simple example to remove elements from array (from the website) -

_.without([1, 2, 1, 0, 3, 1, 4], 0, 1); // => [2, 3, 4]
share|improve this answer

If you want a new array with the deleted positions removed, you can always delete the specific element and filter out the array. It might need an extension of the array object for browsers that don't implement the filter method but in the long term its easier since all you do is this:

var my_array = [1,2,3,4,5,6];
delete my_array[4];
console.log(my_array.filter(function(a){return typeof a !== 'undefined';}));

Should display [1, 2, 3, 4, 6]

share|improve this answer

Check out this code. It works in every major browser.

remove_item = function (arr, value) {
    var b = '';
    for (b in arr) {
        if (arr[b] === value) {
            arr.splice(b, 1);
            break;
        }
    }
    return arr;
}

Call this function

remove_item(array,value);
share|improve this answer
2  
@RolandIllig Except the use of a for in-loop and the fact that the script could stopped earlier, by returning the result from the loop directly. The upvotes are reasonable ;) – yckart Dec 30 '14 at 16:13
    
This is an excellent approach for small arrays. It works in every browser, uses minimal and intuitive code, and without any extra complex frameworks, shims, or polyfills. – Beejor Aug 21 '16 at 23:12
    
I should also reiterate yckart's comment that for( i = 0; i < arr.length; i++ ) would be a better approach since it preserves the exact indices versus whatever order the browser decides to store the items (with for in). Doing so also lets you get the array index of a value if you need it. – Beejor Aug 21 '16 at 23:20

You can use lodash _.pull (mutate array), _.pullAt (mutate array) or _.without (does't mutate array),

var array1 = ['a', 'b', 'c', 'd']
_.pull(array1, 'c')
console.log(array1) // ['a', 'b', 'd']

var array2 = ['e', 'f', 'g', 'h']
_.pullAt(array2, 0)
console.log(array2) // ['f', 'g', 'h']

var array3 = ['i', 'j', 'k', 'l']
var newArray = _.without(array3, 'i') // ['j', 'k', 'l']
console.log(array3) // ['i', 'j', 'k', 'l']
share|improve this answer
    
That's not core JS as the OP requested, is it? – some-non-descript-user Sep 24 '15 at 21:01
4  
@some-non-descript-user You are right. But a lot of users like me come here looking for a general answer not just for the OP only. – Chun Yang Oct 1 '15 at 3:38

You can use ES6.

var array=['1','2','3','4','5','6']
var index = array.filter((value)=>value!='3');

Output :

["1", "2", "4", "5", "6"]
share|improve this answer
    
This answer is nice because it creates a copy of the original array, instead of modifying the original directly. – Claudio Holanda Mar 16 at 15:27

I'm pretty new to JavaScript and needed this functionality. I merely wrote this:

function removeFromArray(array, item, index) {
  while((index = array.indexOf(item)) > -1) {
    array.splice(index, 1);
  }
}

Then when I want to use it:

//Set-up some dummy data
var dummyObj = {name:"meow"};
var dummyArray = [dummyObj, "item1", "item1", "item2"];

//Remove the dummy data
removeFromArray(dummyArray, dummyObj);
removeFromArray(dummyArray, "item2");

Output - As expected. ["item1", "item1"]

You may have different needs than I, so you can easily modify it to suit them. I hope this helps someone.

share|improve this answer

If you have complex objects in the array you can use filters? In situations where $.inArray or array.splice is not as easy to use. Especially if the objects are perhaps shallow in the array.

E.g. if you have an object with an Id field and you want the object removed from an array:

this.array = this.array.filter(function(element, i) {
    return element.id !== idToRemove;
});
share|improve this answer
    
This is how I like to do it. Using an arrow function it can be a one-liner. I'm curious about performance. Also worth nothing that this replaces the array. Any code with a reference to the old array will not notice the change. – joeytwiddle Jul 29 '16 at 8:50

A more modern, ECMAScript 2015 (formerly known as Harmony or ES 6) approach. Given:

const items = [1, 2, 3, 4];
const index = 2;

Then:

items.filter((x, i) => i !== index);

Yielding:

[1, 2, 4]

You can use Babel and a polyfill service to ensure this is well supported across browsers.

share|improve this answer
3  
Note that .filter returns a new array, which is not exactly the same as removing the element from the same array. The benefit of this approach is that you can chain array methods together. eg: [1,2,3].filter(n => n%2).map(n => n*n) === [ 1, 9 ] – CodeOcelot May 6 '16 at 18:58
    
Great, if I have 600k elements in array and want to remove first 50k, can you imagine that slowness? This is not solution, there's need for function which just remove elements and returns nothing. – Seraph May 30 '16 at 15:11
    
@Seraph For that, you'd probably want to use splice or slice. – bjfletcher May 31 '16 at 22:04
    
@bjfletcher Thats even better, in process of removal, just allocate 50K elements and throw them somewhere. (with slice 550K elements, but without throwing them from the window). – Seraph May 31 '16 at 23:06
    
I'd prefer bjfletcher's answer, which could be as short as items= items.filter(x=>x!=3). Besides, the OP didn't state any requirement for large data set. – runsun Aug 27 '16 at 1:55

ES6 & without mutation: (October 2016)

const removeByIndex = (list, index) =>
  [
    ...list.slice(0, index),
    ...list.slice(index + 1)
  ];

Then :

removeByIndex([33,22,11,44],1) //=> [33,11,44]
share|improve this answer

This gist here will solve your problem, and also deletes all occurrences of the argument instead of just 1 (or a specified value).

Array.prototype.destroy = function(obj){
    // Return null if no objects were found and removed
    var destroyed = null;

    for(var i = 0; i < this.length; i++){

        // Use while-loop to find adjacent equal objects
        while(this[i] === obj){

            // Remove this[i] and store it within destroyed
            destroyed = this.splice(i, 1)[0];
        }
    }

    return destroyed;
}

Usage:

var x = [1, 2, 3, 3, true, false, undefined, false];

x.destroy(3);         // => 3
x.destroy(false);     // => false
x;                    // => [1, 2, true, undefined]

x.destroy(true);      // => true
x.destroy(undefined); // => undefined
x;                    // => [1, 2]

x.destroy(3);         // => null
x;                    // => [1, 2]
share|improve this answer
1  
This is buggy on unsorted lists. [1,2,3,3,2,1].destroy(1) results in [3,3,2,1] plnkr.co/edit/p8QhmOfgl9AzlBWjLLTp?p=preview – Walter Stabosz May 2 '13 at 20:45
    
@WalterStabosz Thanks for pointing that out! I’ve updated both the Gist and the example to fix the bug. It’s unfortunately no longer a one-liner, but I eliminated the dependencies of indexOf and Array#count. – zykadelic May 13 '13 at 13:00

Use jQuery's InArray:

A = [1, 2, 3, 4, 5, 6];
A.splice($.inArray(3, A), 1);
//It will return A=[1, 2, 4, 5, 6]`   

Note: inArray will return -1, if the element was not found.

share|improve this answer
4  
but OP said: "good ol' fashioned JavaScript - no frameworks allowed" – CSᵠ Dec 12 '14 at 18:51
    
for Chrome 50.0, A.splice(-1, 1); will remove the last one in A. – Scott 混合理论 Jun 17 '16 at 9:38

I know there are a lot of answers already, but many of them seem to over complicate the problem. Here is a simple, recursive way of removing all instances of a key - calls self until index isn't found. Yes, it only works in browsers with indexOf, but it's simple and can be easily polyfilled.

Stand-alone function

function removeAll(array, key){
    var index = array.indexOf(key);

    if(index === -1) return;

    array.splice(index, 1);
    removeAll(array,key);
}

Prototype method

Array.prototype.removeAll = function(key){
    var index = this.indexOf(key);

    if(index === -1) return;

    this.splice(index, 1);
    this.removeAll(key);
}
share|improve this answer
    
Just a note, 1 caveat with this method is the potential for stack overflows. Unless you're working with massive arrays, you shouldn't have an issue. – slccsoccer28 Sep 8 '15 at 5:57

I also ran in the situation where I had to remove an element from Array. .indexOf was not working in IE* so sharing my working jQuery.inArray() solution.

var index = jQuery.inArray(val,arr);
if (index > -1) {
    arr.splice(index, 1);
    //console.log(arr);
}
share|improve this answer
    
jQuery is always good for taking care of any cross-browser compatibility issues of the different JavaScript APIs. – Henry Heleine Dec 9 '14 at 22:15

You can do a backward loop to make sure not to screw up the indexes, if there are multiple instances of the element.

var myElement = "chocolate";
var myArray = ['chocolate', 'poptart', 'poptart', 'poptart', 'chocolate', 'poptart', 'poptart', 'chocolate'];

/* Important code */
for (var i = myArray.length - 1; i >= 0; i--) {
    if (myArray[i] == myElement) myArray.splice(i, 1);
}

Live Demo

share|improve this answer
  Array.prototype.removeItem = function(a) {
            for (i = 0; i < this.length; i++) {
                if (this[i] == a) {
                    for (i2 = i; i2 < this.length - 1; i2++) {
                        this[i2] = this[i2 + 1];
                    }
                    this.length = this.length - 1
                    return;
                }
            }
        }

    var recentMovies = ['Iron Man', 'Batman', 'Superman', 'Spiderman'];
    recentMovies.removeItem('Superman');
share|improve this answer

In CoffeeScript:

my_array.splice(idx, 1) for ele, idx in my_array when ele is this_value
share|improve this answer

I think many of the JavaScript instructions are not well thought out for functional programming. Splice returns the deleted element where most of the time you need the reduced array. This is bad.

Imagine you are doing a recursive call and have to pass an array with one less item, probably without the current indexed item. Or imagine you are doing another recursive call and has to pass an array with an element pushed.

In neither of these cases you can do myRecursiveFunction(myArr.push(c)) or myRecursiveFunction(myArr.splice(i,1)). The first idiot will in fact pass the length of the array and the second idiot will pass the deleted element as a parameter.

So what I do in fact... For deleting an array element and passing the resulting to a function as a parameter at the same time I do as follows

myRecursiveFunction(myArr.slice(0,i).concat(a.slice(i+1)))

When it comes to push that's more silly... I do like,

myRecursiveFunction((myArr.push(c),myArr))

I believe in a proper functional language a method mutating the object it's called upon must return a reference to the very object as a result.

share|improve this answer

Create new array:

var my_array = new Array();

Add elements to this array:

my_array.push("element1");

The function indexOf (Returns index or -1 when not found) :

var indexOf = function(needle) 
{
    if(typeof Array.prototype.indexOf === 'function') // newer browsers
    {
        indexOf = Array.prototype.indexOf;
    } 
    else // older browsers
    {
        indexOf = function(needle) 
        {
            var index = -1;

            for(var i = 0; i < this.length; i++) 
            {
                if(this[i] === needle) 
                {
                    index = i;
                    break;
                }
            }
            return index;
        };
    }

    return indexOf.call(this, needle);
};

Check index of this element (tested with firefox and IE8+):

var index = indexOf.call(my_array, "element1");

Remove 1 element located at index from the array

my_array.splice(index, 1);
share|improve this answer

protected by Andrew Marshall Dec 15 '14 at 20:00

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.