8

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"]
3
  • 1
    What did you try? Commented Apr 4, 2018 at 13:09
  • Possible duplicate of How to merge two array of object by using lodash? Commented Apr 4, 2018 at 13:10
  • _(data.hits.hits).map('_source.topics').compact().value() @ChrisR Commented Apr 4, 2018 at 13:11

4 Answers 4

16

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);

Sign up to request clarification or add additional context in comments.

Comments

10

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>

Comments

4

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>

Comments

0

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);

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.