Javascript Array.splice() Does Not Remove Element In The Array?
Solution 1:
My problem was that splice was removing the wrong element from the array. I saw the answer with the while loop but the solution that I made is :
var index = jQuery.inArray(element, arr);
arr.splice(index,1);
Solution 2:
If you look at your original array and the first result array, you'll notice that non-0 elements ARE being removed. The problem from what I can tell is that your array remove
is looking for indices that have since been shifted over one to the left upon the removal of previous ones. You will need to add a correcting adjustment for this in your final for
loop, or approach this another way.
Solution 3:
If you want to remove all the elements from an array, it's better don't use splice
but length
:
options.series[0].data.length = 0;
See: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/length
Update:
I misunderstood the question. In your case I will probably filter out the elements that are zero, instead of makes two loop (one for collect them, and one for remove them). So, something like:
function isNotZero(item) {return item[1] !== 0}
var filtered = options.series[0].data.filter(isNotZero);
options.series[0].data = filtered;
See: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter
If the browser you want to support doesn't implement ES5, I will suggest to you to use a shim for all the es5 methods (in that page there is one for filter), or library like underscore
Solution 4:
I think you can do it pretty fast this way:
var dataArr = ["Retail",1,"Utilities",1,"Food & Restaurant",3,"No Data",4,"Construction",0,"Non-profit",1,"Financial Services",12,"Technology",2,"Law",3,"Religion",3,"Retired",2,"Insurance",0,"Real Estate",2,"Audit",3,"Business Organizations",3,"Media & Marketing",0,"Education",3,"Transportation",0,"Manufacturing",0,"Entertainment & Sports",0,"Architecture & Engineering",0,"Cultural Institutions",0,"Government",0,"Banking",0,"Health Care",0,"Business Services",0];
var item = 0; // value of the item to removewhile (dataArr.indexOf(item) > -1) {
dataArr.splice(dataArr.indexOf(item), 1);
}
console.log(dataArr);
Solution 5:
I use a library called DevBox.Linq.JS
It basically adds Linq type functionality to Javascript Arrays. For example, it adds "Remove":
Array.prototype.Remove = function (condition) {
if (condition == undefined) {
console.error('Informe a expressão para executar a tarefa.')
return;
}
for (var i = 0 ; i < this.length ; i++) {
if (condition(this[i]))
this.splice(i, 1);
}
}
This way you can use it with a lambda like this:
myArray.remove(i=>i=="valueToDelete");
Hope it helps, It already has all the functionality so you don't have to deal with that pesky splice.
Post a Comment for "Javascript Array.splice() Does Not Remove Element In The Array?"