Saad Ahmed
Saad Ahmed

Reputation: 777

Merge multiple array in lodash

I want to merge these array in to single array with unique value. don't want repeated values.

0:Array(2) ["General Fitness", "Health & Fitness"]
1:Array(2) ["Cardiovascular", "Meditation"]
2:Array(3) ["Health & Fitness", "Cardiovascular", "General Fitness"]
3:Array(1) ["Cardiovascular"]

I am expecting this answer:

["General Fitness", "Health & Fitness", "Cardiovascular", "Meditation"]

Upvotes: 8

Views: 21745

Answers (4)

Monty
Monty

Reputation: 21

Simply use lodash flatten method:

const arrs = [ 
  ["General Fitness", "Health & Fitness"],
  ["Cardiovascular", "Meditation"],
  ["Health & Fitness", "Cardiovascular", "General Fitness"],
  ["Cardiovascular"]
];

result = _.flatten(arrs);

console.log(result);

Upvotes: 0

Ori Drori
Ori Drori

Reputation: 193047

With lodash you can use _.union() and _.spread() to generate a function that flattens to a single array with unique values:

const fn = _.spread(_.union);

const arrs = [ 
  ["General Fitness", "Health & Fitness"],
  ["Cardiovascular", "Meditation"],
  ["Health & Fitness", "Cardiovascular", "General Fitness"],
  ["Cardiovascular"]
];

const result = fn(arrs);

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

Using ES6 you can flatten the arrays, and make the result unique by passing it through a Set, and spreading back to an array:

const arrs = [ 
  ["General Fitness", "Health & Fitness"],
  ["Cardiovascular", "Meditation"],
  ["Health & Fitness", "Cardiovascular", "General Fitness"],
  ["Cardiovascular"]
];

const result = [...new Set(arrs.flat())];

console.log(result);

Upvotes: 15

abhishek gupta
abhishek gupta

Reputation: 373

use union

var object =  ["General Fitness", "Health & Fitness"];
var other =  ["Cardiovascular", "Health & Fitness", "Meditation"]
 
_.union(object, other);

// ["General Fitness", "Health & Fitness", "Cardiovascular", "Meditation"]
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

Upvotes: 4

iofjuupasli
iofjuupasli

Reputation: 3873

const arrs = [ 
  ["General Fitness", "Health & Fitness"],
  ["Cardiovascular", "Meditation"],
  ["Health & Fitness", "Cardiovascular", "General Fitness"],
  ["Cardiovascular"]
];

const result = _.uniq(_.flatten(arrs));

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

Upvotes: 10

Related Questions