Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Merge multiple array in lodash

Tags:

node.js

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"]
like image 698
Saad Ahmed Avatar asked Apr 04 '18 13:04

Saad Ahmed


2 Answers

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);
like image 139
Ori Drori Avatar answered Oct 06 '22 22:10

Ori Drori


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>
like image 22
iofjuupasli Avatar answered Oct 07 '22 00:10

iofjuupasli