sg552
sg552

Reputation: 1543

Remove duplicate element in object and leave unique element

I have two object:

obj1

{
  "uuid": "",
  "open_bal_qty": 0,
  "open_bal_value": 0,
  "qty_min": 0,
  "qty_med": 0,
  "qty_max": 0,
  "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
}

obj2

{
  "uuid": "",
  "open_bal_qty": 0,
  "open_bal_value": 0,
  "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
}

How can I remove duplicate and get element not exist in obj2 so my new obj will be:

newObj

{
  "qty_min": 0,
  "qty_med": 0,
  "qty_max": 0,
}

I can use lodash pick but I dont want to manually entered the key name that I want to filter.

const newObj = pick(obj1, [
  'qty_min',
  'qty_med',
  'qty_max',
]);

Thanks in advance.

Upvotes: 1

Views: 88

Answers (3)

Ori Drori
Ori Drori

Reputation: 191976

With lodash you can _.omit() from obj1 all the _.keys() of obj2:

const obj1 = {"uuid":"","open_bal_qty":0,"open_bal_value":0,"qty_min":0,"qty_med":0,"qty_max":0,"kedai_uuid":"198ceaef-4ced-4207-9ba0-62afbb42bb85"};

const obj2 = {"uuid":"","open_bal_qty":0,"open_bal_value":0,"kedai_uuid":"198ceaef-4ced-4207-9ba0-62afbb42bb85"};

const newObj = _.omit(obj1, _.keys(obj2));

console.log(newObj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

Upvotes: 2

brk
brk

Reputation: 50291

Use for..in to iterate the object and Object.hasOwnProperty to check if the second object have the same key

var obj1 = {
  "uuid": "",
  "open_bal_qty": 0,
  "open_bal_value": 0,
  "qty_min": 0,
  "qty_med": 0,
  "qty_max": 0,
  "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
}
var obj2 = {
  "uuid": "",
  "open_bal_qty": 0,
  "open_bal_value": 0,
  "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
}
var newObj = {};
for (var keys in obj1) {
  if (!obj2.hasOwnProperty(keys)) {
    newObj[keys] = obj1[keys]
  }
}

console.log(newObj)

Upvotes: 1

Andrew Li
Andrew Li

Reputation: 57944

You could use _.pick in conjunction with _.difference by finding the difference between the two objects' keys and picking those keys:

const obj1 = {
  "uuid": "",
  "open_bal_qty": 0,
  "open_bal_value": 0,
  "qty_min": 0,
  "qty_med": 0,
  "qty_max": 0,
  "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
};

const obj2 = {
  "uuid": "",
  "open_bal_qty": 0,
  "open_bal_value": 0,
  "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
};

const obj1Keys = _.keys(obj1); //or Object.keys
const obj2Keys = _.keys(obj2);
console.log(_.pick(obj1Keys > obj2Keys ? obj1 : obj2, _.difference(obj1Keys, obj2Keys)))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

Upvotes: 1

Related Questions