0

I did a little research and I found out that by time complexity this is the fastest way of merging two arrays with unique values:

    let array1 = [{"chosen": true, "name": "crypto"}, {"chosen": true, "name": "future"}, {"chosen": true, "name": "money"}, {"chosen": true, "name": "conspiracy"}, {"chosen": true, "name": "economy"}, {"chosen": true, "name": "invest"}, {"chosen": true, "name": "collect"}, {"chosen": true, "name": "tech"}, {"chosen": true, "name": "trump"}, {"chosen": true, "name": "biden"}, {"chosen": true, "name": "aliens"}, {"chosen": true, "name": "culture"}, {"chosen": true, "name": "politics"}, {"chosen": true, "name": "society"}, {"chosen": true, "name": "america"}, {"chosen": true, "name": "entertainment"}, {"chosen": true, "name": "people"}, {"chosen": true, "name": "opinion"}, {"chosen": true, "name": "blog"}]

let array2 = [{"chosen": false, "name": "crypto"}, {"chosen": false, "name": "future"}, {"chosen": false, "name": "money"}, {"chosen": false, "name": "conspiracy"}, {"chosen": false, "name": "economy"}, {"chosen": false, "name": "invest"}, {"chosen": false, "name": "collect"}, {"chosen": false, "name": "tech"}, {"chosen": false, "name": "trump"}, {"chosen": false, "name": "biden"}, {"chosen": false, "name": "aliens"}, {"chosen": false, "name": "culture"}, {"chosen": false, "name": "politics"}, {"chosen": false, "name": "society"}, {"chosen": false, "name": "america"}, {"chosen": false, "name": "entertainment"}, {"chosen": false, "name": "people"}, {"chosen": false, "name": "opinion"}, {"chosen": false, "name": "blog"}, {"chosen": false, "name": "tabloid"}, {"chosen": false, "name": "humor"}, {"chosen": false, "name": "announcement"}]

let array3 = array1.concat(array2);
array3 = [...new Set([...array1,...array2])]

The problem is, it does not returns unique values from both of the arrays.The output is like this:

-----array3 [
  { chosen: true, name: 'crypto' },
  { chosen: true, name: 'future' },
  { chosen: true, name: 'money' },
  { chosen: true, name: 'conspiracy' },
  { chosen: true, name: 'economy' },
  { chosen: true, name: 'invest' },
  { chosen: true, name: 'collect' },
  { chosen: true, name: 'tech' },
  { chosen: true, name: 'trump' },
  { chosen: true, name: 'biden' },
  { chosen: true, name: 'aliens' },
  { chosen: true, name: 'culture' },
  { chosen: true, name: 'politics' },
  { chosen: true, name: 'society' },
  { chosen: true, name: 'america' },
  { chosen: true, name: 'entertainment' },
  { chosen: true, name: 'people' },
  { chosen: true, name: 'opinion' },
  { chosen: true, name: 'blog' },
  { chosen: false, name: 'crypto' },
  { chosen: false, name: 'future' },
  { chosen: false, name: 'money' },
  { chosen: false, name: 'conspiracy' },
  { chosen: false, name: 'economy' },
  { chosen: false, name: 'invest' },
  { chosen: false, name: 'collect' },
  { chosen: false, name: 'tech' },
  { chosen: false, name: 'trump' },
  { chosen: false, name: 'biden' },
  { chosen: false, name: 'aliens' },
  { chosen: false, name: 'culture' },
  { chosen: false, name: 'politics' },
  { chosen: false, name: 'society' },
  { chosen: false, name: 'america' },
  { chosen: false, name: 'entertainment' },
  { chosen: false, name: 'people' },
  { chosen: false, name: 'opinion' },
  { chosen: false, name: 'blog' },
  { chosen: false, name: 'tabloid' },
  { chosen: false, name: 'humor' },
  { chosen: false, name: 'announcement' }
]

Is it because I have objects and it requires different way of doing It? Any suggestions please?

user14587589
  • 449
  • 3
  • 19
  • 1
    Yes, [two different objects are never equal to each other](https://stackoverflow.com/questions/11704971/why-are-two-identical-objects-not-equal-to-each-other), even if they contain the same data. You have to compare all fields. Or any subset that makes them unique (e.g., if you have `id` property). – VLAZ Jan 07 '21 at 11:16
  • 1
    Ah I get it, so I either have to compere them by chosen prop or give them ids – user14587589 Jan 07 '21 at 11:17
  • Seems like you should be comparing them by name. And you have to override `chosen`. I'm not sure which one takes precedence, though. EDIT: [you could do this if you want to override properties](https://stackoverflow.com/a/65594187/), so you'd index by `name` and then override the object. – VLAZ Jan 07 '21 at 11:18
  • 1
    Two objects are considering equal in which condition in your case? If the both `chosen` and `name` fields are same then or only one of them is enough? – Sajeeb Ahamed Jan 07 '21 at 11:18
  • I shall filter them by chosen,I need to keep the values from array 1 with chosen true and delete same values in array 2 with chosen false – user14587589 Jan 07 '21 at 11:20
  • 1
    Look at this https://stackoverflow.com/questions/41404607/why-does-javascript-set-not-do-unique-objects – tsfahmad Jan 07 '21 at 11:24

0 Answers0