来自条件的for循环的未定义数组索引

时间:2017-09-06 00:38:37

标签: javascript arrays loops for-loop

所以,我有一个实例,我正在过滤一些数组,我最终在我的数组中未定义。我不能拥有它,因为它会影响我传递此数组的函数。我希望数组只构建有数据的东西。请参阅我的示例代码,我相信你会明白我的意思:

var foo = ['one', 'two', 'one', 'three', 'one', 'one'];
var bar = [];

for (var i=0, l = foo.length; i < l; i++) {
    if(foo[i].includes('one') !== false){
        bar[i]=foo[i];
    }
}
console.log(bar);

这是一个小提琴:https://jsfiddle.net/o3b1m2u0/

我尝试使用另一个计数器并抵消它但我似乎无法做到正确。想法?

2 个答案:

答案 0 :(得分:1)

这是因为你在不存在的位置向数组添加内容。您尚未在循环中定义的所有项目都将设置为undefined。请改用pushfiltermap

&#13;
&#13;
var foo = ['one', 'two', 'one', 'three', 'one', 'one'];
var bar = [];

for (var i=0, l = foo.length; i < l; i++) {
    if(foo[i].includes('one') !== false){
        bar.push(foo[i]);
    }
}
console.log(bar);

//you could also use .filter

var bar2 = foo.filter(f => f.includes('one'))
console.log('bar2', bar2)

//a third option is to use .map if you need something else other than undefined as a placeholder

var bar3 = foo.map((f,i) => f.includes('one') ? f : i)
console.log('bar3', bar3)
&#13;
&#13;
&#13;

答案 1 :(得分:-1)

索引i是数组foo的索引,如果你按照自己的方式编写,数组条就变成了稀疏数组