所以,我有一个实例,我正在过滤一些数组,我最终在我的数组中未定义。我不能拥有它,因为它会影响我传递此数组的函数。我希望数组只构建有数据的东西。请参阅我的示例代码,我相信你会明白我的意思:
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/
我尝试使用另一个计数器并抵消它但我似乎无法做到正确。想法?
答案 0 :(得分:1)
这是因为你在不存在的位置向数组添加内容。您尚未在循环中定义的所有项目都将设置为undefined。请改用push,filter或map。
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;
答案 1 :(得分:-1)
索引i是数组foo的索引,如果你按照自己的方式编写,数组条就变成了稀疏数组