16

I have an array with name "ids" and some values like ['0','567','956','0','34']. Now I need to remove "0" values from this array. ids.remove ("0"); is not working.

1
  • 3
    Well, Array.prototype.remove does not exist, so it cannot work ;) Commented Apr 28, 2011 at 11:24

9 Answers 9

18

Here's a function that will remove elements of an array with a particular value that won't fail when two consecutive elements have the same value:

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

var a = [1, 0, 0, 1];
removeElementsWithValue(a, 0);
console.log(a); // [1, 1]

In most browsers (except IE <= 8), you can use the filter() method of Array objects, although be aware that this does return you a new array:

a = a.filter(function(val) {
    return val !== 0;
});
Sign up to request clarification or add additional context in comments.

3 Comments

You could just return val; as well
@BrianLeishman: If all your array members are guaranteed to be numbers then yes, but it's not quite the same in general: using return val will filter out any falsy value, such as false or an empty string, rather than just 0.
Yeah it was specifically in this example, I figured since you had the !== that it made sense here
15

Use splice method in javascript. Try this function:

function removeElement(arrayName,arrayElement)
 {
    for(var i=0; i<arrayName.length;i++ )
     { 
        if(arrayName[i]==arrayElement)
            arrayName.splice(i,1); 
      } 
  }

Parameters are:

arrayName:-      Name of the array.
arrayElement:-   Element you want to remove from array

6 Comments

what is 1. I think i need to use "0" insted of "1" in my case right?
@vissupepala: No. Read the documentation: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… . It means remove 1 element starting from index i.
Nope. Its the number of element you want to remove. you have to pass 0 in arrayElement
That will fail if the array has two consecutive zeroes.
@TimDown is right, you would need to do i-- in the if statement to solve that.
|
14

Here's one way to do it:

const array = ['0', '567', '956', '0', '34'];
const filtered = array.filter(Number);

console.log(filtered);

1 Comment

>TypeError: 0 is not a function
5

For ES6 best practice standards:

let a = ['0','567','956','0','34'];


a = a.filter(val => val !== "0");

(note that your "id's" are strings inside array, so to check regardless of type you should write "!=")

Comments

4

For non-trivial size arrays, it's still vastly quicker to build a new array than splice or filter.

var new_arr = [],
tmp;

for(var i=0, l=old_arr.length; i<l; i++)
{
  tmp = old_arr[i];

  if( tmp !== '0' )
  {
    new_arr.push( tmp );
  }
}

If you do splice, iterate backwards!

Comments

2

Below code can solve your problem

 for(var i=0; i<ids.length;i++ )
 { 
    if(ids[i]=='0')
        ids.splice(i,1); 
  } 

2 Comments

its simple and easy to understand, and solves the problem also. thanks
That will fail if the array has two consecutive zeroes.
2
ids.filter(function(x) {return Number(x);});

Comments

2

I believe, the shortest method is

var newList = ['0', '567', '956', '0', '34'].filter(cV => cV != "0")

You could always do,

listWithZeros = ['0', '567', '956', '0', '34']
newList = listWithZeros.filter(cv => cv != "0")

The newList contains your required list.

Explanation

Array.prototype.filter()

This method returns a new array created by filtering out items after testing a conditional function

It takes in one function with possibly 3 parameters.

Syntax:

Array.prototype.filter((currentValue, index, array) => { ... })

The parameters explain themselves.

Read more here.

Comments

0

The easy approach is using splice!!. But there's a problem, every time you remove an element your array size will constantly reduce. So the loop will skip 1 index the array size reduces.

This program will only remove every first zero.

// Wrong approach
let num = [1, 0, 0,  2, 0, 0, 3,];

for(let i=0; i<num.length; i++){
    if(num[i]==0)
        num.splice(i, 1);
}
console.log(num)

the output will be

[1,0,2,0,3]

So to remove all the zeros you should increase the index if you found the non-zero number.

let i = 0;
while(i<num.length){
    if(num[i]==0){
        num.splice(i,1);
    }
    else{
        i++;
    }
}

But there's a better way. Since changing the size of the array only affects the right side of the array. You can just traverse in reverse and splice.

for(let i=num.length-1; i>=0; i--){
    if(num[i]===0)
        num.splice(i,1);
}

1 Comment

Welcome to Stackoverflow. This question is asked more than 9 years ago and it has an accepted answer. The accepted answer also uses split. Please add some details about the reason you are adding a new answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.