2

I have an array containing hundreds sometimes thousands of objects with vectors of 3D objects. There are three or even more identical objects in the array (I think they are needed also for the render to know which side the normals of the surface are facing) but for what I want to do I need the identical objects gone. The bad part is, I cant just check one value since sometimes two objects share for example the same value for x but then the y or z is different. Is there an efficient way to do that? Unfortunately all tutorials I found deal with checking for one value and I need to check all of them.

const vectors = [
{x: 6.869495194905539e-9, y: -0.11905603855848312, z: -0.3318425416946411},
{x: 6.869495194905539e-9, y: -0.11905603855848312, z: -0.3318425416946411},
{x: 6.869495194905539e-9, y: -0.11905603855848312, z: -0.3318425416946411},
{x: 0.06476999074220657, y: -0.11905603855848312, z: -0.3254662752151489},
{x: 0.06476999074220657, y: -0.11905603855848312, z: -0.3254662752151489},
{x: 0.06476999074220657, y: -0.11905603855848312, z: -0.3254662752151489},
{x: 0.06476999074220657, y: -0.11905603855848312, z: -0.3254662752151489},
{x: 0.12705090641975403, y: -0.11905603855848312, z: -0.306582510471344},
{x: 0.12705090641975403, y: -0.11905603855848312, z: -0.306582510471344},
{x: 0.12705090641975403, y: -0.11905603855848312, z: -0.306582510471344},
etc
etc
]
4
  • Have you tried to convert the array to a set and then convert again to array without the duplicated values Commented Jul 1, 2022 at 8:10
  • stringify each object and then check string equality. Commented Jul 1, 2022 at 8:12
  • @Osakr that won't work, references of objects will be differents Commented Jul 1, 2022 at 8:12
  • @Cid check my answer Commented Jul 1, 2022 at 8:17

2 Answers 2

3

You can use sets to remove the duplicates:

const vectors = [
{x: 6.869495194905539e-9, y: -0.11905603855848312, z: -0.3318425416946411},
{x: 6.869495194905539e-9, y: -0.11905603855848312, z: -0.3318425416946411},
{x: 6.869495194905539e-9, y: -0.11905603855848312, z: -0.3318425416946411},
{x: 0.06476999074220657, y: -0.11905603855848312, z: -0.3254662752151489},
{x: 0.06476999074220657, y: -0.11905603855848312, z: -0.3254662752151489},
{x: 0.06476999074220657, y: -0.11905603855848312, z: -0.3254662752151489},
{x: 0.06476999074220657, y: -0.11905603855848312, z: -0.3254662752151489},
{x: 0.12705090641975403, y: -0.11905603855848312, z: -0.306582510471344},
{x: 0.12705090641975403, y: -0.11905603855848312, z: -0.306582510471344},
{x: 0.12705090641975403, y: -0.11905603855848312, z: -0.306582510471344}
];

const arrayWithoutDuplicates = Array.from(
  new Set(vectors.map(v => JSON.stringify(v))),
  json => JSON.parse(json)
);
Sign up to request clarification or add additional context in comments.

2 Comments

Tried yours too and it works perfect. Is any of these better performing? Didn't notice a difference in my project right now.
Well, using arrays wouldn't be recommended if you have many vectors, take a look at linked lists instead, it will increase the performance because you don't have to modify the whole array every time an item changes.
1

Nevermind, I did finally find an answer in another thread here.

var result = arr.reduce((unique, o) => {
    if(!unique.some(obj => obj.x === o.x && obj.y === o.y && obj.z === o.z)) {
      unique.push(o);
    }
    return unique;
},[]);
console.log(result);

Remove duplicate values from an array of objects in javascript

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.