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

Javascript 如何使用ES6和Node Js删除txt文件中的重复项?,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我有一个以空格分隔的.txt文件,其中包含重复项。我想消除重复,但不觉得这是一项容易的任务 该文件包含:橙色苹果梨 起初,我在txt扩展名上遇到了一个错误。我更新了main以包含 const fs = require('fs'); require.extensions['.txt'] = function (module, filename) { module.exports = fs.readFileSync(filename, 'utf8'); 这有助于解决错误,之后我能够创建一个cons

我有一个以空格分隔的.txt文件,其中包含重复项。我想消除重复,但不觉得这是一项容易的任务

该文件包含:
橙色苹果梨

起初,我在txt扩展名上遇到了一个错误。我更新了main以包含

const fs = require('fs');
require.extensions['.txt'] = function (module, filename) {
module.exports = fs.readFileSync(filename, 'utf8');
这有助于解决错误,之后我能够创建一个
const

const fruitList = require('../support/fruitList.txt');

但是,我仍然无法删除重复。我试过neek,但也不起作用

重要的一点是,尝试捕获由
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)
}
设置为spread是一种比filter提取重复项快得多的方法,如Juan的回答所示:

let data='橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨橙色苹果梨
data=data.toString().split(/[\n\t']/)
console.time('method1')
const firstArr=data.filter((项目,位置,arr)=>arr.indexOf(项目)==pos)
console.timeEnd('method1')
console.time('method2')
const secondArr=[…新集合(数据)]
console.timeEnd('method2')

log('method1',firstArr',method2',secondArr)
您可以使用集合删除集合中的重复项

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"]

您可以在一行中完成:

const fruitList = [...new Set(require('../support/fruitList.txt'))];

请参见

中的详细讨论,这是一个很好的答案<代码>设置传播速度要快得多!数据集太小。测试无效。只需显示最小时间-1ms。