【问题标题】:Javascript hasher nested functionJavascript哈希嵌套函数
【发布时间】:2014-10-21 22:06:30
【问题描述】:
我正在尝试创建一个函数来修剪不是 4 个字符长的数组值。由于某种原因,它不起作用。我认为它可能与 return 声明有关,但我不确定,我需要帮助。这是函数的代码:(请不要建议使哈希器更好的方法,我只需要函数方面的帮助)
function cutit(seq){
for(var i=0;i<seq.length;i++){
var temparr=seq[i].split("");
if(temparr.length % 4 !== 0){
seq.splice(seq[i],1);
return seq;
}
}
}
【问题讨论】:
标签:
javascript
arrays
function
for-loop
【解决方案1】:
五件事:
- 是的,
return 应该发生在循环之后,而不是在找到要删除的第一个项目之后。
-
.splice() 为第一个参数而不是元素获取索引。通过i 而不是seq[i]。
-
splice(…, 1) 确实将您正在迭代的数组的长度减一。您需要注意这一点并减少您的计数器,以便再次查看 i 索引,在下一次迭代中下一个元素将位于何处。
- 与其将字符串拆分为单个字符的数组并获取其长度,不如直接获取字符串的长度。
- 您的函数会删除所有不是倍数 4 长的字符串,而不是所有不完全是4 个字符长的字符串。不确定这是否是有意的。
function cutit(seq) {
for (var i=0; i<seq.length; i++) {
if (seq[i].length !== 4) {
seq.splice(i--, 1);
}
}
return seq;
}
另外,请注意,对数组进行变异很少是一个好主意(尤其是像这样使用多个拼接的低效方式)。返回一个新数组要容易得多,您可以使用更高阶的filter Array method:
function cutit(seq) {
return seq.filter(function(str) {
return str.length === 4;
});
}