如何使用ES6和Node Js删除txt文件中的重复项?

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)


Emm*_*N K 5

一件重要的事情是尝试捕获抛出的任何错误,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)