如何确保没有在数组中输入两个逗号...这适用于从用户输入生成数组的Web应用程序,它是一个文本字段..我无法将其更改为其他任何内容。
示例.. var names=["Kim",,"Andrew","Ashley"];
在这个数组中,我们有两个连续的逗号,而不是一个..我怎么能确保如果用户输入任何不好的字符,我就把它拿出来......比如逗号,点等等..对于额外逗号的例子,考虑到我没有其他选择但是处理生成像这样的数组的文本字段,这将如何实现
答案 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"]
答案 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;