KevinMac746
KevinMac746

Reputation: 81

How to get index and value comparing two arrays which was changed the position and deleted?

I have two arrays

const originalArray= ["form1","form2","form3","form4","form5"];
const modifiedArray = ["form2","additionForm1","form1","form3","additionForm2"];

expected results is,

let testScript = [form1 is moved to position 2,
                            form2 is moved to position 0,
                            form3 is moved to position 3, 
                            from 4 is deleted position is 3]
                            form5 is deleted position is 4,
                            additional1 added to position 1
                            additional2 added to position 4 
                           ]

I can get deleted data using follwing code, But when try to get moved data and position changed data I faced some problem.

this is what I tried,

function testFunc(){

  const originalArray = ["form1","form2","form3","form4","form5"];
  const modifiedArray= ["form2","additionForm1","form1","form3","additionForm2"];
  let flag = false;
  let result = [];
  
  originalArray.forEach((Nelement, Nindex) => { 
     
      modifiedArray.forEach((Telement, Tindex) => {
 
            if(Nelement === Telement){ //check originalArray data containg the modified array
              flag = true;
              //return false;
            }
           
            if(flag === true && Nindex !== Tindex){ //try to get moved data
              result.push(Nelement+" change the position to "+ Tindex )
            }
  })
     
      if(flag !== true){ //if original array data doesn't include in modified array
          result.push(Nelement+" removed from "+ Nindex + " position" )
      }
     
        flag = false
    })
  }

Upvotes: 1

Views: 67

Answers (2)

Allabakash
Allabakash

Reputation: 2027

just replace following snippet

if(flag === true && Nindex !== Tindex){ //try to get moved data
              result.push(Nelement+" change the position to "+ Tindex )
            }

to

if(Nelement === Telement && Nindex !== Tindex){ //try to get moved data
      result.push(Nelement+" change the position to "+ Tindex )
 }

This is because flag is not getting unset in the second loop.

complete solution below.

function testFunc(){

  const originalArray = ["form1","form2","form3","form4","form5"];
  const modifiedArray= ["form2","additionForm1","form1","form3","additionForm2"];
  let flag = false;
  let result = [];
  
  originalArray.forEach((Nelement, Nindex) => { 
     
      modifiedArray.forEach((Telement, Tindex) => {
 
            if(Nelement === Telement){ //check originalArray data containg the modified array
              flag = true;
              //return false;
            }
           
            if(Nelement === Telement && Nindex !== Tindex){ //try to get moved data
              result.push(Nelement+" change the position to "+ Tindex )
            }
  })
     
      if(flag !== true){ //if original array data doesn't include in modified array
          result.push(Nelement+" removed from "+ Nindex + " position" )
      }
     
        flag = false;
    })
return result;
  }

Upvotes: 1

James
James

Reputation: 2787

This is an interesting question. This should work and the result is

"form1 is moved to position 2",
"form2 is moved to position 0",
"form3 is moved to position 3",
"form4 is deleted position is 3",
"form5 is deleted position is 4",
"additionForm1 added to position 1",
"additionForm2 added to position 4"

I use another loop to display the added items to the array

          const originalArray = ["form1","form2","form3","form4","form5"];
  const modifiedArray= ["form2","additionForm1","form1","form3","additionForm2"];
  let flag = false;
  let result = []
  
function testFunc(){
    //Find added items between the two lists
  originalArray.forEach((Nelement, Nindex) => { 
     
      modifiedArray.forEach((Telement, Tindex) => {
 
            if(Nelement === Telement){ //check originalArray data containg the modified array
              flag = true;
           
            if(Nindex !== Tindex)//try to get moved data
              result. push(Nelement+" is moved to position "+ Tindex )
            }
  })
     
      if(!flag){ //if original array data doesn't include in modified array
          result.push(Nelement+" is deleted position is "+ Nindex)
      }
     
        flag = false    
    })
//check added item
let arr = modifiedArray.filter(x => !originalArray.includes(x));
for(let j in arr)
result.push(arr[j]+" added to position "+modifiedArray.indexOf(arr[j]))
console.log(result)
  }
  testFunc()


   

Upvotes: 1

Related Questions