我怎样才能在Javascript中处理这种错误?

时间:2013-03-25 23:35:27

标签: javascript javascript-framework

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

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

在这个数组中,我们有两个连续的逗号,而不是一个..我怎么能确保如果用户输入任何不好的字符,我就把它拿出来......比如逗号,点等等..对于额外逗号的例子,考虑到我没有其他选择但是处理生成像这样的数组的文本字段,这将如何实现

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

两个连续逗号(或一个前导逗号)是elision,它会递增下一个成员的索引。 elided成员不作为数组的属性存在。要查找此类成员,您可以使用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

这也处理数组文字中的额外空格。

答案 2 :(得分:0)

这不是每个人说的错误,只是你的表单中的空条目被添加到你的数组中。试试这个:

//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;