Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

remove trailing elements from array that are equal to zero - better way

I have very long array containing numbers. I need to remove trailing zeros from that array.

if my array will look like this:

var arr = [1,2,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];

I want to remove everything except [1, 2, 0, 1, 0, 1].

I have created function that is doing what is expected, but I'm wondering if there is a build in function I could use.

var arr = [1,2,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
for(i=arr.length-1;i>=0;i--)
{
    if(arr[i]==0) 
    {
        arr.pop();
    } else {
        break;
    }
}
console.log(arr);

Can this be done better/faster?

like image 352
Misiu Avatar asked Aug 18 '14 11:08

Misiu


People also ask

How do you remove trailing zeros from strings?

Step 1: Get the string Step 2: Count number of trailing zeros n Step 3: Remove n characters from the beginning Step 4: return remaining string.

How do I get rid of trailing zeros in CPP?

x = floor((x * 100) + 0.5)/100; and then print using printf to truncate any trailing zeros.. It is better and simpler to let printf do the rounding by specifying the precision in the format string: %. 2g (or %.

How do you remove all the zeros from the end of a list in Python?

rtrim(0) method if you wish. it breaks if len(items) == 0 .


2 Answers

Assuming:

var arr = [1,2,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];

You can use this shorter code:

while(arr[arr.length-1] === 0){ // While the last element is a 0,
    arr.pop();                  // Remove that last element
}

Result:

arr == [1,2,0,1,0,1]
like image 181
Cerbrus Avatar answered Nov 02 '22 23:11

Cerbrus


var arr = [1,2,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];

var copy = arr.slice(0);
var len = Number(copy.reverse().join('')).toString().length;
arr.length = len;

arr -> [1, 2, 0, 1, 0, 1]

how it works

copy.reverse().join('') becomes "00000000000000000101021"

when you convert a numerical string to number all the preceding zeroes are kicked off

var len  = Number(copy.reverse().join('')) becomes 101021

now by just counting the number i know from where i have to remove the trailing zeroes and the fastest way to delete traling elements is by resetting the length of the array.

arr.length = len;

DEMO

like image 37
Prabhu Murthy Avatar answered Nov 03 '22 00:11

Prabhu Murthy