从数组(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循环递减而不是递增,但我觉得我的代码在以后会更有效率。欢迎您。你没有