javascript array.splice()不会删除数组中的元素?

imO*_*ing 3 javascript jquery

我有一个remove []数组,它包含数据数组中所有元素的所有索引位置(如下所示).

数据数组:

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
Run Code Online (Sandbox Code Playgroud)

我的javascript

   var remove =  [];          
    $.each(options.series[0].data, function(index, item) {
    if (options.series[0].data[index][1] == 0)
    {                    
        //options.series[0].data.splice(index,1);  
        remove[index] = index;                                      

    }

    for (i=0; i<=remove.length; i++)
    {
    //alert(remove);                
    if (remove[i] != undefined)
        options.series[0].data.splice(remove[i],1);

    }   
Run Code Online (Sandbox Code Playgroud)

splice()之后的数据数组.很多带0的元素仍然存在.

Retail,1,Utilities,1,Food & Restaurant,3,No Data,4,Non-profit,1,Financial Services,12,Technology,2,Law,3,Religion,3,Retired,2,Insurance,0,Audit,3,Business Organizations,3,Media & Marketing,0,Education,3,Manufacturing,0,Entertainment & Sports,0,Cultural Institutions,0,Banking,0,Business Services,0
Run Code Online (Sandbox Code Playgroud)

如果我改变拼接以包括替换元素

options.series[0].data.splice(remove[i],1,'removed');
Run Code Online (Sandbox Code Playgroud)

从数据数组中删除所有0个元素.是吧?

Retail,1,Utilities,1,Food & Restaurant,3,No Data,4,removed,Non-profit,1,Financial Services,12,Technology,2,Law,3,Religion,3,Retired,2,removed,Real Estate,2,Audit,3,Business Organizations,3,removed,Education,3,removed,removed,removed,removed,removed,removed,removed,removed,removed
Run Code Online (Sandbox Code Playgroud)

如何删除数据数组中的所有0个元素?

小智 15

每次删除一个,你都会使任何进一步的缓存索引过时,因为从那一点开始的数组被重新索引.

结果,您在第一个之后删除了错误的项目.

您应该remove反向迭代数组.

var i = remove.length;
while (i--) {
    if (remove[i] != undefined)
        options.series[0].data.splice(remove[i],1);
}   
Run Code Online (Sandbox Code Playgroud)

此外,undefined如果您只是将.push()每个索引放入remove数组中,您可以提高性能并摆脱测试...

remove.push(index);
Run Code Online (Sandbox Code Playgroud)