gpt4 book ai didi

javascript - 在 Javascript 中按作者对对话数组进行排序

转载 作者:行者123 更新时间:2023-12-02 23:57:18 25 4
gpt4 key购买 nike

我有一个很长的 txt 文件,其中包含以下格式的对话:

[19/12/17 16:30:36] A: ‎Los mensajes en este grupo ahora están protegidos con cifrado de extremo a extremo.
[19/12/17 16:31:23] B: Buenas tardes, bienvenidos
‎[19/12/17 16:31:36] B: ‎imagen omitida
[19/12/17 16:31:36] C: Hola!! ☺
[19/12/17 16:31:51] D: Hola!!!!
[19/12/17 16:32:10] B: Estamos aquí reunidos... bueno, todos sabéis ya para qué
[19/12/17 16:32:49] B: Formamos parte de un estudio de x relacionadas con la Lógica Convergente 😉
[19/12/17 16:34:32] E. Carvajal: Hola...!
[19/12/17 16:34:37] B: Antes de nada,(...) “lista de espera”
[19/12/17 16:37:23] C: Hola❗❗❗
[19/12/17 16:38:17] F: Por cierto como no os conozco a todos yo soy e 🙋‍♀
[19/12/17 16:39:19] G: Soy soy x🙋‍♂
[19/12/17 16:39:51] B: Yo x

我已经使用 split("[") 将 txt 文件拆分为一个数组。我使用 [ 因为消息很长并且包含换行符。所有不属于时间戳的 [ 符号都会被转义。

到目前为止,这给了我一系列消息,如下所示:

1: "[timestamp] b: blabla"
2: "[timestamp] c: blabla"
3: "[timestamp] a: blabla"
(...)
3000: "[timestamp] b: blabla"

现在我需要根据作者将数组中的项目保存到不同的数组中,可能会循环遍历它并识别唯一的作者,作为每个项目中 ] 和 : 之间的文本的唯一作者。

最终结果应该是一个数组集合,其中每个数组都包含作者的消息集合:

[timestamp] c: blabla
[timestamp] c: blabla
[timestamp] c: blabla

然后:

[timestamp] b: blabla
[timestamp] b: blabla

等等。

我想我可以迭代数组并识别所有唯一的 "] 作者:" 然后将它们插入自己的数组中,但我对如何做有点迷失就是这样。

我记得当时用 Lodash 做了类似的事情,但我不记得函数的名称了。你会如何在 JS 中处理这样的事情?

最佳答案

我建议将每一行变成一个对象结构,这样你就会得到如下对象:

{ timestamp: "2019-01-01T12:13:44", author: "Helen", msg: "blablabla" }

您可以使用Map筛选各行,以收集作者的记录。

// Sample input:
const text = `[2019-01-02T12:03:08] john peterson: blabla
[2019-01-02T16:33:15] helen bloom: blabla
[2019-01-02T17:00:10] mark stanley: blabla
[2019-01-02T17:14:44] helen bloom: blabla
[2019-01-02T17:14:59] mark stanley: blabla
[2019-01-02T17:22:21] jenifer mcenroe: blabla`;

// Parse/structure the data:
const data = text
.match(/.+/g) // Split into lines
.map(line => line.match(/\[(.*?)\]\s*(.*?)\:\s*(.*)/)) // Pattern match
.filter(Boolean) // Exclude non-matching lines
// ... and structure into objects:
.map(([, timestamp, author, msg]) => ({timestamp, author, msg}));
// Create an array per author using a Map
const map = new Map(data.map(({author}) => [author, []]));
// Populate those arrays
data.forEach(item => map.get(item.author).push(item));
// ...and extract them into the final result:
const result = Array.from(map.values());

console.log(result);

关于javascript - 在 Javascript 中按作者对对话数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55316332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com