【问题标题】: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;
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多