2012-11-27 137 views
0

我得到了一个具有不同学校成绩的数组。这些数据是从json文件收集的。在这个数组中,也有0级成绩。这些成绩来自没有完成课程的学生。我想删除数组中的所有0,但我不知道如何启动。阵列的从数组中删除特定值

例如:

var grades = [7,6,4,0,4,8,9,6,6,10,0,7,8,6,7] 

P.S.我使用D3

+0

你试过[搜索对谷歌(https://www.google.com/search?oq=remove+zeros+从+阵列+ JavaScript的)? – Xymostech

+0

Ofcourse但我找不到任何东西。另外我是d3的新手。 – timG

回答

5

您可以尝试Array.filter

var nonzero = grades.filter(function(v) { 
    return v !== 0; 
}); 

由于commenteers正确地指出,.filter不利用所有的浏览器。您可以使用MDN提供的垫片(见上面的链接),或者你的代码重新写这样的事:

var i=0, len = grades.length, nonzero = []; 
for(;i<len;i++) { 
    grades[i] !== 0 && nonzero.push(grades[i]); 
} 
+2

应该警告这是javascript 1.6的一部分,可能不会100%支持。 – MushinNoShin

+0

这适用于我。谢谢! – timG

1

不是最优雅的代码,但它的工作原理。

var grades = [7,6,4,0,4,8,9,6,6,10,0,7,8,6,7], 
     newGrades = [], 
     grade; 

    while (grades.length) { 
    grade = grades.pop(); 

    if (grade != 0) 
     newGrades.push(grade); 
    } 

    grades = newGrades; 
0

原始,但仍然有效:

var grades = [7,6,4,0,4,8,9,6,6,10,0,7,8,6,7]; 
    var j=0; 
    var newgrades=[]; 
    for (var i=0; i < grades.length; i++) { 
     if (grades[i]) { 
     newgrades[j++] = grades[i]; 
     } 
    } 

等级= newgrades;

0

尝试.splice()方法

var grades = [7, 6, 4, 0, 4, 8, 9, 6, 6, 10, 0, 7, 8, 6, 7]; 

while (true) { 
    var index = grades.indexOf(0); 
    console.log(index); 
    if (index > 0) { 
     grades.splice(index, 1); 
    } 
    else { 
     break; 
    } 
} 
console.log(grades); 
​ 

Check Fiddle

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

不要忘记'===' - 检查零,或任何虚假值将被删除。 – David

+0

由于这是一组数字,因此可能应该删除虚假值。无论哪种方式,我都不主张过分使用'===',并且给出问题的参数并不是必需的。 – joequincy

+0

也许,也许不是。 “删除数组中的所有0”虽然对我来说很清楚,但是......在你的情况下,你可以只使用'!grades [i]' – David