开发者问题收集

数组未被过滤

2021-03-26
66

我一直试图从文本文件中获取项目(以换行符分隔)并在此过程中删除选定的项目。我以前使用过类似的方法,并且成功了,那是在 index.js 中执行此操作时,而这次,我为此创建了一个新文件,以免弄乱 index.js ,但似乎不起作用。

index.js:

const items = require("item_thing.js")("./items.txt");
console.log(items);

items.txt:

a
 b
c


    d
e
f
g
a
c
e
g

item_thing.js:

const { readFileSync } = require("fs");

module.exports = (path) => {
    let items = readFileSync(path, "utf8");
    items = items
        .split(/\r?\n/)
        .filter(i => i != "" || !i.startsWith(" ") || !i.startsWith("\t"));
    return items;
}

预期输出:

[
  'a', 'c', 'e',
  'f', 'g', 'a',
  'c', 'e', 'g'
]

实际输出:

[
  'a', ' b',  'c', '',
  '',  '\td', 'e', 'f',
  'g', 'a',   'c', 'e',
  'g', ''
]

这可能与 javascript 非阻塞有关吗? 这可能是 node.js 的一个错误吗? 或者是我的代码有问题?

谢谢 :)

1个回答

or || 运算符更改为 and && 运算符。

items = items
  .split(/\r?\n/)
  .filter((i) => i != "" && !i.startsWith(" ") && !i.startsWith("\t"));

or || 运算符意味着至少有一个应该是正确的,这就是为什么所有输出对于一个条件至少为真。

and && 运算符意味着每个条件都应该正确。



示例:

// Using OR || operator
console.log(2 + 2 === 8 || 2 + 3 === 5); // True

// Using && operator
console.log(2 + 2 === 8 && 2 + 3 === 5); // False
Manas Khandelwal
2021-03-26