-3

I have two arrays and need to change the order of elements in a way to be similar. by property c. i should get index of object of property c: 2 for example and place it to the right index in arrB . JavaScript

const arrA= [{
    a: 1,
    b: [{
        c: 2,
        d: 3
      },
      {
        c: 5,
        f: 6
      }
    ]
  },
  {
    a: 2,
    b: [{
        c: 2,
        d: 3
      },
      {
        c: 5,
        f: 6
      }
    ]
  }
];

const arrB = [{
    a: 1,
    b: [{
        c: 5,
        f: 6
      },
      {
        c: 2,
        d: 3
      },
    ]
  },
  {
    a: 2,
    b: [{
        c: 5,
        f: 6
      },
      {
        c: 2,
        d: 3
      },
    ]
  }
];

What I need is to sort arrB in order of all elements in key b to have the same order like in arrA. in reality this object contain more fields and they aren't similar. but they have the same property c by which i should change the order

const arrB= [{
    a: 1,
    b: [{
        c: 2,
        d: 3
      },
      {
        c: 5,
        f: 6
      }
    ]
  },
  {
    a: 2,
    b: [{
        c: 2,
        d: 3
      },
      {
        c: 5,
        f: 6
      }
    ]
  }
];

1 Answers1

0

You can use sort() to order the elements based on the indexes of the matching elements in arrA[i].b.

const arrA = [{
    a: 1,
    b: [{
        c: 2,
        d: 3
      },
      {
        c: 5,
        f: 6
      }
    ]
  },
  {
    a: 2,
    b: [{
        c: 2,
        d: 3
      },
      {
        c: 5,
        f: 6
      }
    ]
  }
];

const arrB = [{
    a: 1,
    b: [{
        c: 5,
        f: 6
      },
      {
        c: 2,
        d: 3
      },
    ]
  },
  {
    a: 2,
    b: [{
        c: 5,
        f: 6
      },
      {
        c: 2,
        d: 3
      },
    ]
  }
];

arrB.forEach((item, i) =>
  item.b.sort((el1, el2) => arrA[i].b.findIndex(el => el.c == el1.c) - arrA[i].b.findIndex(el => el.c == el2.c)));

console.log(arrB);
Barmar
  • 741,623
  • 53
  • 500
  • 612