Las*_*awk 1 javascript node.js ecmascript-6
我有一个用空格分隔的.txt文件,其中包含重复项。我想删除骗子,但并不容易。
该文件包含: orange orange apple apple pear
起初,我在txt扩展名方面遇到错误。我更新了主包含
const fs = require('fs');
require.extensions['.txt'] = function (module, filename) {
module.exports = fs.readFileSync(filename, 'utf8');
Run Code Online (Sandbox Code Playgroud)
这有助于解决错误,之后我就可以创建一个const。
const fruitList = require('../support/fruitList.txt');
Run Code Online (Sandbox Code Playgroud)
但是,我仍然无法删除重复项。我尝试了neek,那也不起作用。
小智 6
您可以使用集合删除集合中的重复项。
let fruitList = ["orange", "orange", "apple", "apple", "pear"];
let fruitSet = new Set(fruitList); // {"orange", "apple", "pear"}
//convert back to array
const newArray = [...fruitSet];//["orange", "apple", "pear"]
Run Code Online (Sandbox Code Playgroud)
一件重要的事情是尝试捕获抛出的任何错误,readFileSync以找到问题的根源,即为什么您的文件未被读取。根据数据的格式化方式,您通常需要捕获所有分隔符,例如制表符、空格和换行符。下面的代码使用 split 中的正则表达式来执行此操作,并将所有值放入一个数组中。然后下面的行使用索引来删除重复项。尝试这个:
const fs = require('fs')
try {
let data = fs.readFileSync('test.txt', 'utf8')
// split data by tabs, newlines and spaces
data = data.toString().split(/[\n \t ' ']/)
// this will remove duplicates from the array
const result = data.filter((item, pos) => data.indexOf(item) === pos)
console.log(result)
} catch (e) {
console.log('Error:', e.stack)
}
Run Code Online (Sandbox Code Playgroud)
设置为传播是比过滤器提取重复项要快得多的方法,如胡安的回答所示:
const fs = require('fs')
try {
let data = fs.readFileSync('test.txt', 'utf8')
// split data by tabs, newlines and spaces
data = data.toString().split(/[\n \t ' ']/)
// this will remove duplicates from the array
const result = data.filter((item, pos) => data.indexOf(item) === pos)
console.log(result)
} catch (e) {
console.log('Error:', e.stack)
}
Run Code Online (Sandbox Code Playgroud)