从数组(Regex)中删除空字符串-Javascript
我的项目中有以下代码:从数组(Regex)中删除空字符串-Javascript,javascript,arrays,parsing,Javascript,Arrays,Parsing,我的项目中有以下代码: 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); } } } 而且 if (i
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);
}
}
}
而且
if (inputArr[i] == "" || !inputArr[i].match(/[^\s]/)) {
inputArr.splice(i,1);
}
…不要一起工作。我得到错误,“对象不支持此属性或方法”。如果我注释掉其中一个并与另一个一起运行代码,它似乎工作得很好。语法似乎也很正确。有什么想法吗
inputArr是从文本区域解析的字符串数组
谢谢。String.split()将字符串拆分为一个数组,稍后将其视为字符串。
您可以使用replace
功能代替拆分:
inputArr[i] = inputArr[i].replace(/\s+/g, '');
然后:
String.split()将字符串拆分为一个数组,稍后将其视为字符串。
您可以使用replace
功能代替拆分:
inputArr[i] = inputArr[i].replace(/\s+/g, '');
然后:
如果你更换
inputArr[i] = inputArr[i].split(/\s+/);
与
这应该解决一个问题
还有,!inputArr[i].match(/[^\s]/)
是多余的,因为您已经从该输入数组值中删除了所有空白
最后,在拼接数组或按相反顺序迭代时,需要减小索引
测试。如果更换
inputArr[i] = inputArr[i].split(/\s+/);
与
这应该解决一个问题
还有,!inputArr[i].match(/[^\s]/)
是多余的,因为您已经从该输入数组值中删除了所有空白
最后,在拼接数组或按相反顺序迭代时,需要减小索引
要进行测试。.split()
返回一个数组,该数组不适用于.match()
我需要这部分代码来删除所有空白和空字符串,但是行
inputArr[i] = inputArr[i].split(/\s+/);
您似乎在说,应该从数组中删除至少不包含一个非空白字符的项,并且应该更新任何重新生成的项以删除任何空白(但保留其他字符)。如果是,请先使用.replace()
删除空白,然后测试是否删除该项
请注意,如果在循环中使用.splice()
,则需要调整迭代器变量i
,以允许缺少元素,或者更简单的是,向后循环。
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)
测试移动到循环的前面,而不是在每次迭代中执行该测试。.split()
返回一个数组,该数组不适用于.match()
我需要这部分代码来删除所有空白和空字符串,但是行
inputArr[i] = inputArr[i].split(/\s+/);
您似乎在说,应该从数组中删除至少不包含一个非空白字符的项,并且应该更新任何重新生成的项以删除任何空白(但保留其他字符)。如果是,请先使用.replace()
删除空白,然后测试是否删除该项
请注意,如果在循环中使用.splice()
,则需要调整迭代器变量i
,以允许缺少元素,或者更简单的是,向后循环。
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)
测试移动到循环的前面,而不是在每次迭代中执行该测试。在所描述的循环中需要另一个循环,该循环将通过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);
}
}
}
}
例如,这将给您留下字词之间有空格的字符串,但不能超过一个空格(例如,它应该去掉双倍间距和制表符间距)。您描述的循环中需要另一个循环,该循环将通过
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);
}
}
}
}
例如,这将给您留下字词之间有空格的字符串,但不能超过一个空格(例如,它应该去掉双空格和制表符空格)。如果您想删除空字符串或仅空白的条目,请在数组上使用.filter()
inputArr = inputArr.filter(function(item) {
return accountsBool && Boolean(item.trim())
});
注意以下几点:
- 这将用新阵列替换旧阵列
- 旧浏览器的
需要一个垫片.filter()
- 对于旧浏览器,
需要一个垫片.trim()
- 您可以使用
而不是item.replace(/^\s+\s+$/g,”)
item.trim()
- 您可以使用
.filter()
inputArr = inputArr.filter(function(item) {
return accountsBool && Boolean(item.trim())
});
注意以下几点:
- 这将用新阵列替换旧阵列
- 旧浏览器的
需要一个垫片.filter()
- 对于旧浏览器,
需要一个垫片.trim()
- 您可以使用
而不是item.replace(/^\s+\s+$/g,”)
item.trim()
- 您可以使用
split
返回一个数组。数组没有match
方法。您正在拆分inputArr[i],因此它现在是一个数组,然后使用match()。split
返回一个数组。数组没有match
方法。您正在拆分inputArr[i],因此它现在是一个数组,然后使用match()。非常感谢,这对我来说更有意义。我将不得不重新构建大量代码来使用for循环递减而不是递增,但我觉得我的代码在以后会更有效率。欢迎您。你没有