我的项目中有以下代码:
for(i = 0; i < inputArr.length; i++) {
if(accountsBool) {
inputArr[i] = inputArr[i].split(/\s+/);
if (inputArr[i] == "" || !inputArr[i].match(/[^\s]/)) {
inputArr.splice(i,1);
}
}
}
我会尽力解释这个问题......
我需要这部分代码删除所有空格和空字符串,但是行......
inputArr[i] = inputArr[i].split(/\s+/);
和...
if (inputArr[i] == "" || !inputArr[i].match(/[^\s]/)) {
inputArr.splice(i,1);
}
......不要一起工作。我收到错误,“对象不支持此属性或方法”。如果我注释掉一个并用另一个运行代码它似乎工作正常。语法似乎也是正确的。有什么想法吗?
inputArr是一个从文本区域解析的字符串数组。
谢谢。
答案 0 :(得分:3)
.split()
返回一个数组,该数组不适用于.match()
。
我需要这部分代码删除所有空格和空字符串,但行......
您似乎在说,应该从数组中删除不包含至少一个非空白字符的项目,并且应该更新任何剩余项目以删除任何空格(但保留其他字符) 。如果是,请先使用.replace()
删除空格,然后测试是否删除该项目。
请注意,如果在循环中使用.splice()
,则需要调整迭代器变量i
以允许缺少元素 - 或者更简单,向后循环。 < / p>
for(i = inputArr.length - 1; i >= 0; i--) {
if(accountsBool) {
inputArr[i] = inputArr[i].replace(/\s/g,"");
if (inputArr[i] === "") {
inputArr.splice(i,1);
}
}
}
如果您说要删除不包含至少一个非空白字符的项目,但是您想在其余元素中留下空格,请执行以下操作:
for(i = inputArr.length - 1; i >= 0; i--) {
if(accountsBool) {
if (!/[^\s]/.test(inputArr[i])) {
inputArr.splice(i,1);
}
}
}
另请注意,如果循环中没有其他处理,则应将if(accountsBool)
测试移至循环之前,而不是在每次迭代时执行。
答案 1 :(得分:0)
String.split()将字符串拆分为一个数组,稍后您将其视为字符串。
您可以使用replace
函数代替split:
inputArr[i] = inputArr[i].replace(/\s+/g, '');
然后:
if (inputArr[i] == "") {
inputArr.splice(i,1);
}
答案 2 :(得分:0)
如果您更换
inputArr[i] = inputArr[i].split(/\s+/);
与
inputArr[i] = inputArr[i].replace(/\s/g,'');
应解决一个问题。
此外,!inputArr[i].match(/[^\s]/)
是多余的,因为您已从该输入数组值中删除了所有空格。
最后,您需要在拼接数组时递减索引,或者以相反的顺序迭代。
答案 3 :(得分:0)
您需要在您描述的循环中使用另一个循环,该循环将通过split
方法生成的数组。正如评论者所说,使用数组不可能match
。如下所示:
for (var i = 0; i < inputArr.length; i++) {
if(accountsBool) {
inputArr[i] = inputArr[i].split(/\s+/); // produces an array
for (var j = 0; j < inputArr[i].length; j++) {
if (inputArr[i][j] === "" || !inputArr[i][j].match(/[\S]/)) { // check each string in the array for empty or space
// inputArr.splice(i,1);
}
}
}
}
如上所述,RegEx的[^\s]
部分也可以重写[\S]
。
但是你用splice
试图做什么并不完全清楚(因此我在上面评论过)。如果你试图完全摆脱字符串中的所有空格,那么你的代码可以简单得多 - 你只需要使用replace
方法。
如果您正在尝试摆脱过多的空白,那么您的代码可能会更简单:只需在每个字符串上使用replace
并使用/\s+/
作为您的RegEx搜索模式和' '
作为替代。之后可以通过简单的条件检查删除空字符串...
for (var i = 0; i < inputArr.length; i += 1) {
if (accountsBool) {
inputArr[i] = inputArr[i].replace(/\s+/, ' '); // replaces all multiple spaces with one space
if (!inputArr[i]) { // check each string in the array for empty or space
inputArr.splice(i,1);
}
}
}
这将为您留下字符串,例如,单词之间有空格,但永远不会超过一个空格(例如,它应该摆脱双倍间距和制表符间距)。
答案 4 :(得分:0)
如果要删除空字符串或仅空格的条目,请在数组上使用.filter()
。
inputArr = inputArr.filter(function(item) {
return accountsBool && Boolean(item.trim())
});
请注意以下事项:
.filter()
.trim()
的垫片
item.replace(/^\s+|\s+$/g, "")
代替item.trim()