1

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

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

The Output i got

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

The desired Output

 { itachi: 'Sir || hi ||hello' },  { Batman: 'hi ||how r u' }, { itachi: 'fine' },
]
MassEdits
  • 21
  • 5

2 Answers2

1

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

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)

Adrian Mole
  • 49,934
  • 160
  • 51
  • 83
MassEdits
  • 21
  • 5
0

you just need to check the final value. because the last value is skipped with the code index < arr.length - 1

var data = [
  { itachi: 'Sir' },{ itachi: 'hi ' },{ itachi: 'hello' },
  { Batman: 'hi' },{Batman: 'how r u' },{ itachi: 'fine' },
]
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);
perona chan
  • 101
  • 1
  • 8
  • That's not working bro.. i check the value in if condition [index+1] so that would be arr.lenght-1..so found the answer thank you brother – MassEdits May 15 '23 at 00:33