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

问题描述 投票:0回答:4

我有一个以空格分隔的 .txt 文件,其中包含重复内容。我想删除这些骗子,但发现这不是一件容易的事。

该文件包含:

orange orange apple apple pear

起初,我遇到了 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
,但也不起作用。

javascript node.js ecmascript-6
4个回答
9
投票

您可以使用集合来删除集合中的重复项。

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

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)
}

设置为传播是比过滤器提取重复项要快得多的方法,如 Juan 的答案所示:

let data = 'orange orange apple apple pear orange orange apple apple pear orange orange apple apple pear orange orange apple apple pear orange orange apple apple pear orange orange apple apple pear orange orange apple apple pear'

data = data.toString().split(/[\n \t ' ']/)

console.time('method1')
const firstArr = data.filter((item, pos, arr) => arr.indexOf(item) === pos)

console.timeEnd('method1')

console.time('method2')
const secondArr = [...new Set(data)]

console.timeEnd('method2')

console.log('method1', firstArr, 'method2', secondArr)


3
投票

您只需一行即可完成:

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

请参阅此问题

中的深入讨论

0
投票

我刚刚为我的 gulp 配置编写了一个函数来删除重复的行。在我的例子中,我使用分离副本 分割数组中 a 已经可以处理的行。要漫游文件中的文本,只需加入相同的 将文本放入同一个文件中。您可以使用其他分隔符,例如空格 \s 或某些符号 - ',' 或 ';'等等。以数组形式形成文本并删除重复的项目。

import fs from 'fs';

export async function removeDuplicates() {

 const filePath = './src/ads.txt';

 try {

  const 
    data = fs.readFileSync(filePath, 'utf-8'),
    lines = data.split('\n'),
    uniqueLines = Array.from(new Set(lines)),
    result = uniqueLines.join('\n');

  fs.writeFileSync(filePath, result, 'utf-8');

  console.log('Duplicated lines have been successfully removed.');

 } catch (error) {

  console.error('Error while processing the operation: ', error);

 }
}

export { removeDuplicates as rmvreplicas };

在 gulp 文件中写入函数后,您可以启动它执行以下行:

$ 吞下 rmv 副本

© www.soinside.com 2019 - 2024. All rights reserved.