i am using whatsapp chat export .i made it as a Json.i want store continuos messages as one message in NodeJs

huangapple go评论76阅读模式
英文:

i am using whatsapp chat export .i made it as a Json.i want store continuos messages as one message in NodeJs

问题

我明白,以下是您要翻译的内容:

"i have a whatsapp chat export i want to make the continuos messages as single message"

"the messages are given below i want to make the continuos messages as single message"

"My NodeJs code"

"in this code i read the data from txt file a store in array"

"then the continuous messages should be placed under one object"

"this program only joins two messages only not join the third one"

"how do i join the third element in the object"

"const fs = require("fs");"

"var data = JSON.parse(fs.readFileSync("file.txt"));"

"var newData = [];"

"data.forEach((x, index, arr) => {"

"if (index < arr.length - 1) {"

"y = arr[index + 1];"

"xkey = Object.keys(x);"

"ykey = Object.keys(y);"

"//console.log(xkey, ykey);"

"if(xkey[0] == ykey[0]) {"

"x = { [xkey]: x[xkey] + " " + y[ykey] };"

"delete arr[index + 1];"

"}"

"newData.push(x);"

"}"

"});"

"console.log(newData);"

"This is the text file"

"The Output i got"

"The desired Output"

英文:

i have a whatsapp chat export i want to make the continuos messages as single message

the messages are given below i want to make the continuos messages as single message

My NodeJs code

in this code i read the data from txt file a store in array
`then the continuous messages should be placed under one object

this program only joins two messages only not join the third one

how do i join the third element in the object

const fs = require(&quot;fs&quot;);

var data = JSON.parse(fs.readFileSync(&quot;file.txt&quot;));
var newData = [];
data.forEach((x, index, arr) =&gt; {
  if (index &lt; arr.length - 1) {
    y = arr[index + 1];
    xkey = Object.keys(x);
    ykey = Object.keys(y);
    //console.log(xkey, ykey);
    if(xkey[0] == ykey[0]) {
      x = { [xkey]: x[xkey] + &quot; &quot; + y[ykey] };
      delete arr[index + 1];
    }
    newData.push(x);
  }
});
console.log(newData);

This is the text file

[
  { itachi: &#39;Sir&#39; },{ itachi: &#39;hi &#39; },{ itachi: &#39;hello&#39; },
  { Batman: &#39;hi&#39; },Batman: &#39;how r u&#39; },{ itachi: &#39;fine&#39; },
 
]

The Output i got

[
  { itachi: &#39;Sir || hi&#39; },{ itachi: &#39;hello&#39; },
    { Batman: &#39;hi ||how r u&#39; },{ itachi: &#39;fine&#39; }, 
]

The desired Output

 { itachi: &#39;Sir || hi ||hello&#39; },  { Batman: &#39;hi ||how r u&#39; }, { itachi: &#39;fine&#39; },
]

答案1

得分: 1

我找到答案了:我将消息存储在下一个元素中,以便再次检查该值:

var data = [
  { itachi: 'Sir' },{ itachi: 'hi ' },{ itachi: 'hello' },
  { Batman: 'hi' },{Batman: 'how r u' },{ itachi: 'fine' },]

data.forEach((x, index, arr) => {
  if(index < arr.length - 1){
    y = arr[index + 1];
    xkey = Object.keys(x);
    ykey = Object.keys(y);
    //console.log(xkey, ykey);
    if(xkey[0] == ykey[0]) {
      x = { [xkey]: x[xkey] + " " + y[ykey] };
     arr[index]=""
     arr[index+1]=x
      
      
    }
    
  }
})
data=data.filter(x=>x!=="")
console.log(data)

希望这有帮助。

英文:

I found the answer: I store the messages in the next element so that it will check the value again:

var data = [
  { itachi: &#39;Sir&#39; },{ itachi: &#39;hi &#39; },{ itachi: &#39;hello&#39; },
  { Batman: &#39;hi&#39; },{Batman: &#39;how r u&#39; },{ itachi: &#39;fine&#39; },]


data.forEach((x, index, arr) =&gt; {
  if(index &lt; arr.length - 1){
    y = arr[index + 1];
    xkey = Object.keys(x);
    ykey = Object.keys(y);
    //console.log(xkey, ykey);
    if(xkey[0] == ykey[0]) {
      x = { [xkey]: x[xkey] + &quot; &quot; + y[ykey] };
     arr[index]=&quot;&quot;
     arr[index+1]=x
      
      
    }
    
  }
})
data=data.filter(x=&gt;x!==&quot;&quot;)
console.log(data)

答案2

得分: 0

你只需要检查最终的数值,因为最后一个数值在代码 index &lt; arr.length - 1 中被跳过。以下是代码的翻译部分:

var data = [
  { itachi: '先生' },{ itachi: '嗨' },{ itachi: '你好' },
  { Batman: '嗨' },{Batman: '你好吗' },{ itachi: '好的' },
]
var newData = [];
data.forEach((x, index, arr) => {
  if(index < arr.length - 1){
    y = arr[index + 1];
    xkey = Object.keys(x);
    ykey = Object.keys(y);
    //console.log(xkey, ykey);
    if(xkey[0] == ykey[0]) {
      x = { [xkey]: x[xkey] + " " + y[ykey] };
      delete arr[index + 1];
    }
    newData.push(x);
  }else{
    newData.push(x);
  }
});
console.log(newData);

这是你提供的代码的中文翻译部分。

英文:

you just need to check the final value. because the last value is skipped with the code index &lt; arr.length - 1
<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

var data = [
  { itachi: &#39;Sir&#39; },{ itachi: &#39;hi &#39; },{ itachi: &#39;hello&#39; },
  { Batman: &#39;hi&#39; },{Batman: &#39;how r u&#39; },{ itachi: &#39;fine&#39; },
]
var newData = [];
data.forEach((x, index, arr) =&gt; {
  if(index &lt; arr.length - 1){
    y = arr[index + 1];
    xkey = Object.keys(x);
    ykey = Object.keys(y);
    //console.log(xkey, ykey);
    if(xkey[0] == ykey[0]) {
      x = { [xkey]: x[xkey] + &quot; &quot; + y[ykey] };
      delete arr[index + 1];
    }
    newData.push(x);
  }else{
    newData.push(x);
  }
});
console.log(newData);

<!-- end snippet -->

huangapple
  • 本文由 发表于 2023年5月14日 23:14:42
  • 转载请务必保留本文链接:https://go.coder-hub.com/76248219.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定