【问题标题】:How can I deal with this kind of bug in Javascript? [duplicate]我该如何处理 Javascript 中的这种错误? [复制]
【发布时间】:2013-03-15 15:24:17
【问题描述】:

如何确保没有在数组中输入两个逗号 .. 这是针对从用户输入生成数组的 Web 应用程序,它是一个文本字段 .. 我无法将其更改为其他任何内容。

例子..var names=["Kim",,"Andrew","Ashley"];

在这个数组中,我们有两个连续的逗号,而不是一个 .. 我如何确保如果用户输入了任何不好的字符,我只需将其取出 .. 像逗号、点等..对于额外逗号的示例,考虑到我别无选择,只能处理生成这样一个数组的文本字段,如何实现这一点

【问题讨论】:

  • 我被要求在代码中实际操作它..
  • 多余的逗号可以像the answer below一样处理。您还需要处理哪些其他类型的“无效”输入?您需要如何处理它?
  • 我想对此投反对票,但没有这样做的声誉....查看您上一个问题的其他答案,您应该弄清楚

标签: javascript javascript-framework


【解决方案1】:

通过函数(见下文)运行数组以删除数组中的无效值。在您的情况下,["Kim",,"Andrew","Ashley"] 中第二个元素的值是 undefined

var stripEmpty = function (ary) {
    var result = [];
    for (var i = 0; i < ary.length; i++) {
        if (ary[i] !== undefined) {
            result.push(ary[i]);
        }
    }
    return result;
};

那么你可以这样做:

var names = ["Kim",,"Andrew","Ashley"];
var strippedNames = stripEmpty(names);    //  ["Kim","Andrew","Ashley"]

查看工作小提琴:http://jsfiddle.net/amyamy86/LymAZ/

【讨论】:

    【解决方案2】:

    两个连续的逗号(或前导逗号)是一个elision,它增加下一个成员的索引。省略的成员不作为数组的属性存在。要查找此类成员,您可以使用in 运算符:

    var a = [,0,1,,  , ,2,3,,  ,];
    
    var i = a.length;
    
    while (i--) {
    
      if (!(i in a)) {  // returns true if a has no index i
        a.splice(i, 1);
      }
    }
    
    alert(a); // 0,1,2,3
    

    这也处理了数组字面量中的额外空格。

    【讨论】:

      【解决方案3】:

      这并不是一个错误,只是您将表单中的空条目添加到数组中。试试这个:

      //assume your array has been filled up
      
      var mod_names = names.join("#"); // you can use any delimeter apart from '#'
      
      if(mode_names.indexOf(" ") > -1){
        mode_names.replace(/\s+/gi, "");
      }
      mode_names.replace(/#/gi, " ");
      mod_names = mod_names.split(); // the default is a space char
      names = mode_names;
      

      【讨论】:

        猜你喜欢
        • 2015-10-22
        • 1970-01-01
        • 1970-01-01
        • 2020-04-25
        • 1970-01-01
        • 2013-07-14
        • 1970-01-01
        • 2020-04-05
        • 1970-01-01
        相关资源
        最近更新 更多