Remove all of the duplicate numbers in an array of numbers [duplicate]
This question already has an answer here:
Get all unique values in a JavaScript array (remove duplicates)
66 answers
I received this question for practice and the wording confused me, as I see 2 results that it might want.
And either way, I'd like to see both solutions.
For example, if I have an array:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
I'm taking this as wanting the final result as either:
let finalResult = [1, 2, 3, 4, 5, 8, 9, 10];
OR:
let finalResult = [1, 9, 10];
The difference between the two being, one just removes any duplicate numbers and leaves the rest and the second just wants any number that isn't a duplicate.
Either way, I'd like to write two functions that does one of each.
This, given by someone else gives my second solution.
let elems = {},
arr2 = arr.filter(function (e) {
if (elems[e] === undefined) {
elems[e] = true;
return true;
}
return false;
});
console.log(arr2);
I'm not sure about a function for the first one (remove all duplicates).
javascript arrays duplicates
marked as duplicate by Jared Smith, pushkin, BlueRaja - Danny Pflughoeft, the_lotus, Moira 2 days ago
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
This question already has an answer here:
Get all unique values in a JavaScript array (remove duplicates)
66 answers
I received this question for practice and the wording confused me, as I see 2 results that it might want.
And either way, I'd like to see both solutions.
For example, if I have an array:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
I'm taking this as wanting the final result as either:
let finalResult = [1, 2, 3, 4, 5, 8, 9, 10];
OR:
let finalResult = [1, 9, 10];
The difference between the two being, one just removes any duplicate numbers and leaves the rest and the second just wants any number that isn't a duplicate.
Either way, I'd like to write two functions that does one of each.
This, given by someone else gives my second solution.
let elems = {},
arr2 = arr.filter(function (e) {
if (elems[e] === undefined) {
elems[e] = true;
return true;
}
return false;
});
console.log(arr2);
I'm not sure about a function for the first one (remove all duplicates).
javascript arrays duplicates
marked as duplicate by Jared Smith, pushkin, BlueRaja - Danny Pflughoeft, the_lotus, Moira 2 days ago
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
If you're using lodash, you can use_.uniq()
– BlueRaja - Danny Pflughoeft
2 days ago
1
Further, this is asking for the inverse of Get all non-unique values (i.e.: duplicate/more than one occurrence) in an array. Finally, this post is asking two separate questions and both have good answers elsewhere already.
– Søren D. Ptæus
2 days ago
To answer the question "which one is it" in a comment-answer: if you're asked to remove duplicates, I believe you should understand the first variant. The second variant removes all element that have duplicates, meaning the "original" value AND its duplicates.
– Pierre Arlaud
2 days ago
add a comment |
This question already has an answer here:
Get all unique values in a JavaScript array (remove duplicates)
66 answers
I received this question for practice and the wording confused me, as I see 2 results that it might want.
And either way, I'd like to see both solutions.
For example, if I have an array:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
I'm taking this as wanting the final result as either:
let finalResult = [1, 2, 3, 4, 5, 8, 9, 10];
OR:
let finalResult = [1, 9, 10];
The difference between the two being, one just removes any duplicate numbers and leaves the rest and the second just wants any number that isn't a duplicate.
Either way, I'd like to write two functions that does one of each.
This, given by someone else gives my second solution.
let elems = {},
arr2 = arr.filter(function (e) {
if (elems[e] === undefined) {
elems[e] = true;
return true;
}
return false;
});
console.log(arr2);
I'm not sure about a function for the first one (remove all duplicates).
javascript arrays duplicates
This question already has an answer here:
Get all unique values in a JavaScript array (remove duplicates)
66 answers
I received this question for practice and the wording confused me, as I see 2 results that it might want.
And either way, I'd like to see both solutions.
For example, if I have an array:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
I'm taking this as wanting the final result as either:
let finalResult = [1, 2, 3, 4, 5, 8, 9, 10];
OR:
let finalResult = [1, 9, 10];
The difference between the two being, one just removes any duplicate numbers and leaves the rest and the second just wants any number that isn't a duplicate.
Either way, I'd like to write two functions that does one of each.
This, given by someone else gives my second solution.
let elems = {},
arr2 = arr.filter(function (e) {
if (elems[e] === undefined) {
elems[e] = true;
return true;
}
return false;
});
console.log(arr2);
I'm not sure about a function for the first one (remove all duplicates).
This question already has an answer here:
Get all unique values in a JavaScript array (remove duplicates)
66 answers
javascript arrays duplicates
javascript arrays duplicates
edited 2 days ago
pushkin
4,363112954
4,363112954
asked 2 days ago
mph85mph85
1229
1229
marked as duplicate by Jared Smith, pushkin, BlueRaja - Danny Pflughoeft, the_lotus, Moira 2 days ago
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by Jared Smith, pushkin, BlueRaja - Danny Pflughoeft, the_lotus, Moira 2 days ago
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
If you're using lodash, you can use_.uniq()
– BlueRaja - Danny Pflughoeft
2 days ago
1
Further, this is asking for the inverse of Get all non-unique values (i.e.: duplicate/more than one occurrence) in an array. Finally, this post is asking two separate questions and both have good answers elsewhere already.
– Søren D. Ptæus
2 days ago
To answer the question "which one is it" in a comment-answer: if you're asked to remove duplicates, I believe you should understand the first variant. The second variant removes all element that have duplicates, meaning the "original" value AND its duplicates.
– Pierre Arlaud
2 days ago
add a comment |
If you're using lodash, you can use_.uniq()
– BlueRaja - Danny Pflughoeft
2 days ago
1
Further, this is asking for the inverse of Get all non-unique values (i.e.: duplicate/more than one occurrence) in an array. Finally, this post is asking two separate questions and both have good answers elsewhere already.
– Søren D. Ptæus
2 days ago
To answer the question "which one is it" in a comment-answer: if you're asked to remove duplicates, I believe you should understand the first variant. The second variant removes all element that have duplicates, meaning the "original" value AND its duplicates.
– Pierre Arlaud
2 days ago
If you're using lodash, you can use
_.uniq()
– BlueRaja - Danny Pflughoeft
2 days ago
If you're using lodash, you can use
_.uniq()
– BlueRaja - Danny Pflughoeft
2 days ago
1
1
Further, this is asking for the inverse of Get all non-unique values (i.e.: duplicate/more than one occurrence) in an array. Finally, this post is asking two separate questions and both have good answers elsewhere already.
– Søren D. Ptæus
2 days ago
Further, this is asking for the inverse of Get all non-unique values (i.e.: duplicate/more than one occurrence) in an array. Finally, this post is asking two separate questions and both have good answers elsewhere already.
– Søren D. Ptæus
2 days ago
To answer the question "which one is it" in a comment-answer: if you're asked to remove duplicates, I believe you should understand the first variant. The second variant removes all element that have duplicates, meaning the "original" value AND its duplicates.
– Pierre Arlaud
2 days ago
To answer the question "which one is it" in a comment-answer: if you're asked to remove duplicates, I believe you should understand the first variant. The second variant removes all element that have duplicates, meaning the "original" value AND its duplicates.
– Pierre Arlaud
2 days ago
add a comment |
9 Answers
9
active
oldest
votes
Using Set and Array.from()
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
console.log(Array.from(new Set(arr)));
Alternate using regex
regex explanation here
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = arr
.join(',')
.replace(/(b,w+b)(?=.*1)/ig, '')
.split(',')
.map(Number);
console.log(res);
Alternate using objects
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let obj = arr.reduce((acc, val) => Object.assign(acc, {
[val]: val
}), {});
console.log(Object.values(obj));
add a comment |
Just use a simple array.filter
one-liner:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.indexOf(e) == i).sort(function(a, b){return a - b});
console.log(finalResult);
You could use another filter
statement if you wanted the second result:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.filter(f => f == e).length == 1).sort(function(a, b){return a - b});
console.log(finalResult);
You could also add.sort()
to sort them by numerical order:.sort(function(a, b){return a - b})
on finalresult
– Mukyuu
2 days ago
Yes @Mukyuu, that would also be useful
– Jack Bashford
2 days ago
5
Worth pointing out that the run time of this approach will be quadratic on the size of the input, which is probably not great unless the input arrays are known to be always fairly small.
– Joe Lee-Moyet
2 days ago
1
Most voted with multiple array#filter, array#sort and array#indexOf... That is not performant
– Yosvel Quintero
2 days ago
Do note that the.sort()
is not necessary - the end result without the sort is still an array without any duplicate items, just in the same order as the original array. (It does make it exactly match thefinalResult
variable in the question though.)
– Florrie
2 days ago
add a comment |
For the first part you can use Set()
and Spread Syntax to remove duplicates.
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = [...new Set(arr)]
console.log(res)
For the second part you can use reduce()
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
//to get the object with count of each number in array.
let obj = arr.reduce((ac,a) => {
//check if number doesnot occur before then set its count to 1
if(!ac[a]) ac[a] = 1;
//if number is already in object increase its count
else ac[a]++;
return ac;
},{})
//Using reduce on all the keys of object means all numbers.
let res = Object.keys(obj).reduce((ac,a) => {
//check if count of current number 'a' is `1` in the above object then add it into array
if(obj[a] === 1) ac.push(+a)
return ac;
},)
console.log(res)
nice appreciate that, that 2nd one looks crazy. I'm assuming the time complexity for would be less than ideal compared to other results?
– mph85
2 days ago
@mph85 Yes its a little complex because it doesnot go through the array again and again instead it just store all the result obj and then filter it.Its better regarding performance
– Maheer Ali
2 days ago
could you remind me why we need thespread operator
? what happens if we don't have it? @Maheer Ali
– mph85
2 days ago
Is it because if we don't have it, it'll just log an object?
– mph85
2 days ago
@mph85 No if we will not have it. We will have aSet()
inside array. We use it convertSet()
toArray
– Maheer Ali
2 days ago
|
show 1 more comment
You could sort the array before and filter the array by checking only one side for duplicates or both sides.
var array = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10],
result1,
result2;
array.sort((a, b) => a - b);
result1 = array.filter((v, i, a) => a[i - 1] !== v);
result2 = array.filter((v, i, a) => a[i - 1] !== v && a[i + 1] !== v);
console.log(...result1);
console.log(...result2)
thank for that, for theresult1
what is going on with thea[i - 1] !== v
?
– mph85
2 days ago
a
is the array,i
is the actual index, andv
is the actual value. it takes the value from the index before of the actual index and looks if the values are not equal.
– Nina Scholz
2 days ago
ah ok, and sorry, it takes thevalue from the index before of the actual index
? Not sure what you mean by that
– mph85
2 days ago
for example if you have the value9
of the array asv
, then the value before is8
.
– Nina Scholz
2 days ago
ah ok, thank you for that
– mph85
2 days ago
add a comment |
You can create both arrays in One Go
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let unique = new Set();
let repeated = Array.from(arr.reduce((acc, curr) => {
acc.has(curr) ? unique.delete(curr) : acc.add(curr) && unique.add(curr);
return acc;
}, new Set()));
console.log(Array.from(unique))
console.log(repeated)
1
Nice one mate +1
– Maheer Ali
2 days ago
I wonder if the ternary plus&&
could be unclear though (x?y:z&&w
)? It's not obvious to me how JS's order of operations would handle that, and I wonder if you could get across the same logic and reasoning by usingif/else
?
– Florrie
2 days ago
add a comment |
You can use Array.prototype.reduce() create a hash
object where the keys
are the numbers in the array and the values
are going to be the the repeated occurrence of numbers in the arr
array variable..
Then using Object.keys():
- Remove all duplicates
Object.keys(hash)
- Remove all duplicates but filtering with Array.prototype.filter() to get the numbers with only one occurrence
Code:
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const hash = arr.reduce((a, c) => (a[c] = (a[c] || 0) + 1, a), {});
// [1, 2, 3, 4, 5, 8, 9, 10];
const finalResultOne = Object.keys(hash);
// [1, 9, 10];
const finalResultTwo = Object.keys(hash).filter(k => hash[k] === 1);
console.log('finalResultOne:', ...finalResultOne);
console.log('finalResultTwo:', ...finalResultTwo);
add a comment |
You can use closure
and Map
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const build = ar => {
const mapObj = ar.reduce((acc, e) => {
acc.has(e) ? acc.set(e, true) : acc.set(e, false)
return acc
}, new Map())
return function(hasDup = true) {
if(hasDup) return [...mapObj.keys()]
else return [...mapObj].filter(([key, val]) => !val).map(([k, v])=> k)
}
}
const getArr = build(arr)
console.log(getArr())
console.log(getArr(false))
add a comment |
As many other have said, the first one is just [...new Set(arr)]
For the second, just filter out those that occur more than once:
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const count = (arr, e) => arr.filter(n => n == e).length
const unique = arr => arr.filter(e => count(arr, e) < 2)
console.log(unique(arr));
add a comment |
var arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
var map = {};
var finalResult = ;
for (var i = 0; i < arr.length; i++) {
if (!map.hasOwnProperty(arr[i])) {
map[arr[i]] = true;
finalResult.push(arr[i]);
}
}
//if you need it sorted otherwise it will be in order
finalResult.sort(function(a, b) {
return a - b
});
console.log(finalResult);
add a comment |
9 Answers
9
active
oldest
votes
9 Answers
9
active
oldest
votes
active
oldest
votes
active
oldest
votes
Using Set and Array.from()
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
console.log(Array.from(new Set(arr)));
Alternate using regex
regex explanation here
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = arr
.join(',')
.replace(/(b,w+b)(?=.*1)/ig, '')
.split(',')
.map(Number);
console.log(res);
Alternate using objects
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let obj = arr.reduce((acc, val) => Object.assign(acc, {
[val]: val
}), {});
console.log(Object.values(obj));
add a comment |
Using Set and Array.from()
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
console.log(Array.from(new Set(arr)));
Alternate using regex
regex explanation here
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = arr
.join(',')
.replace(/(b,w+b)(?=.*1)/ig, '')
.split(',')
.map(Number);
console.log(res);
Alternate using objects
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let obj = arr.reduce((acc, val) => Object.assign(acc, {
[val]: val
}), {});
console.log(Object.values(obj));
add a comment |
Using Set and Array.from()
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
console.log(Array.from(new Set(arr)));
Alternate using regex
regex explanation here
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = arr
.join(',')
.replace(/(b,w+b)(?=.*1)/ig, '')
.split(',')
.map(Number);
console.log(res);
Alternate using objects
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let obj = arr.reduce((acc, val) => Object.assign(acc, {
[val]: val
}), {});
console.log(Object.values(obj));
Using Set and Array.from()
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
console.log(Array.from(new Set(arr)));
Alternate using regex
regex explanation here
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = arr
.join(',')
.replace(/(b,w+b)(?=.*1)/ig, '')
.split(',')
.map(Number);
console.log(res);
Alternate using objects
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let obj = arr.reduce((acc, val) => Object.assign(acc, {
[val]: val
}), {});
console.log(Object.values(obj));
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
console.log(Array.from(new Set(arr)));
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
console.log(Array.from(new Set(arr)));
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = arr
.join(',')
.replace(/(b,w+b)(?=.*1)/ig, '')
.split(',')
.map(Number);
console.log(res);
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = arr
.join(',')
.replace(/(b,w+b)(?=.*1)/ig, '')
.split(',')
.map(Number);
console.log(res);
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let obj = arr.reduce((acc, val) => Object.assign(acc, {
[val]: val
}), {});
console.log(Object.values(obj));
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let obj = arr.reduce((acc, val) => Object.assign(acc, {
[val]: val
}), {});
console.log(Object.values(obj));
edited 2 days ago
answered 2 days ago
Aswin KumarAswin Kumar
919115
919115
add a comment |
add a comment |
Just use a simple array.filter
one-liner:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.indexOf(e) == i).sort(function(a, b){return a - b});
console.log(finalResult);
You could use another filter
statement if you wanted the second result:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.filter(f => f == e).length == 1).sort(function(a, b){return a - b});
console.log(finalResult);
You could also add.sort()
to sort them by numerical order:.sort(function(a, b){return a - b})
on finalresult
– Mukyuu
2 days ago
Yes @Mukyuu, that would also be useful
– Jack Bashford
2 days ago
5
Worth pointing out that the run time of this approach will be quadratic on the size of the input, which is probably not great unless the input arrays are known to be always fairly small.
– Joe Lee-Moyet
2 days ago
1
Most voted with multiple array#filter, array#sort and array#indexOf... That is not performant
– Yosvel Quintero
2 days ago
Do note that the.sort()
is not necessary - the end result without the sort is still an array without any duplicate items, just in the same order as the original array. (It does make it exactly match thefinalResult
variable in the question though.)
– Florrie
2 days ago
add a comment |
Just use a simple array.filter
one-liner:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.indexOf(e) == i).sort(function(a, b){return a - b});
console.log(finalResult);
You could use another filter
statement if you wanted the second result:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.filter(f => f == e).length == 1).sort(function(a, b){return a - b});
console.log(finalResult);
You could also add.sort()
to sort them by numerical order:.sort(function(a, b){return a - b})
on finalresult
– Mukyuu
2 days ago
Yes @Mukyuu, that would also be useful
– Jack Bashford
2 days ago
5
Worth pointing out that the run time of this approach will be quadratic on the size of the input, which is probably not great unless the input arrays are known to be always fairly small.
– Joe Lee-Moyet
2 days ago
1
Most voted with multiple array#filter, array#sort and array#indexOf... That is not performant
– Yosvel Quintero
2 days ago
Do note that the.sort()
is not necessary - the end result without the sort is still an array without any duplicate items, just in the same order as the original array. (It does make it exactly match thefinalResult
variable in the question though.)
– Florrie
2 days ago
add a comment |
Just use a simple array.filter
one-liner:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.indexOf(e) == i).sort(function(a, b){return a - b});
console.log(finalResult);
You could use another filter
statement if you wanted the second result:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.filter(f => f == e).length == 1).sort(function(a, b){return a - b});
console.log(finalResult);
Just use a simple array.filter
one-liner:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.indexOf(e) == i).sort(function(a, b){return a - b});
console.log(finalResult);
You could use another filter
statement if you wanted the second result:
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.filter(f => f == e).length == 1).sort(function(a, b){return a - b});
console.log(finalResult);
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.indexOf(e) == i).sort(function(a, b){return a - b});
console.log(finalResult);
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.indexOf(e) == i).sort(function(a, b){return a - b});
console.log(finalResult);
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.filter(f => f == e).length == 1).sort(function(a, b){return a - b});
console.log(finalResult);
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let finalResult = arr.filter((e, i, a) => a.filter(f => f == e).length == 1).sort(function(a, b){return a - b});
console.log(finalResult);
edited 2 days ago
Mukyuu
1,82431123
1,82431123
answered 2 days ago
Jack BashfordJack Bashford
12.8k31847
12.8k31847
You could also add.sort()
to sort them by numerical order:.sort(function(a, b){return a - b})
on finalresult
– Mukyuu
2 days ago
Yes @Mukyuu, that would also be useful
– Jack Bashford
2 days ago
5
Worth pointing out that the run time of this approach will be quadratic on the size of the input, which is probably not great unless the input arrays are known to be always fairly small.
– Joe Lee-Moyet
2 days ago
1
Most voted with multiple array#filter, array#sort and array#indexOf... That is not performant
– Yosvel Quintero
2 days ago
Do note that the.sort()
is not necessary - the end result without the sort is still an array without any duplicate items, just in the same order as the original array. (It does make it exactly match thefinalResult
variable in the question though.)
– Florrie
2 days ago
add a comment |
You could also add.sort()
to sort them by numerical order:.sort(function(a, b){return a - b})
on finalresult
– Mukyuu
2 days ago
Yes @Mukyuu, that would also be useful
– Jack Bashford
2 days ago
5
Worth pointing out that the run time of this approach will be quadratic on the size of the input, which is probably not great unless the input arrays are known to be always fairly small.
– Joe Lee-Moyet
2 days ago
1
Most voted with multiple array#filter, array#sort and array#indexOf... That is not performant
– Yosvel Quintero
2 days ago
Do note that the.sort()
is not necessary - the end result without the sort is still an array without any duplicate items, just in the same order as the original array. (It does make it exactly match thefinalResult
variable in the question though.)
– Florrie
2 days ago
You could also add
.sort()
to sort them by numerical order: .sort(function(a, b){return a - b})
on finalresult– Mukyuu
2 days ago
You could also add
.sort()
to sort them by numerical order: .sort(function(a, b){return a - b})
on finalresult– Mukyuu
2 days ago
Yes @Mukyuu, that would also be useful
– Jack Bashford
2 days ago
Yes @Mukyuu, that would also be useful
– Jack Bashford
2 days ago
5
5
Worth pointing out that the run time of this approach will be quadratic on the size of the input, which is probably not great unless the input arrays are known to be always fairly small.
– Joe Lee-Moyet
2 days ago
Worth pointing out that the run time of this approach will be quadratic on the size of the input, which is probably not great unless the input arrays are known to be always fairly small.
– Joe Lee-Moyet
2 days ago
1
1
Most voted with multiple array#filter, array#sort and array#indexOf... That is not performant
– Yosvel Quintero
2 days ago
Most voted with multiple array#filter, array#sort and array#indexOf... That is not performant
– Yosvel Quintero
2 days ago
Do note that the
.sort()
is not necessary - the end result without the sort is still an array without any duplicate items, just in the same order as the original array. (It does make it exactly match the finalResult
variable in the question though.)– Florrie
2 days ago
Do note that the
.sort()
is not necessary - the end result without the sort is still an array without any duplicate items, just in the same order as the original array. (It does make it exactly match the finalResult
variable in the question though.)– Florrie
2 days ago
add a comment |
For the first part you can use Set()
and Spread Syntax to remove duplicates.
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = [...new Set(arr)]
console.log(res)
For the second part you can use reduce()
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
//to get the object with count of each number in array.
let obj = arr.reduce((ac,a) => {
//check if number doesnot occur before then set its count to 1
if(!ac[a]) ac[a] = 1;
//if number is already in object increase its count
else ac[a]++;
return ac;
},{})
//Using reduce on all the keys of object means all numbers.
let res = Object.keys(obj).reduce((ac,a) => {
//check if count of current number 'a' is `1` in the above object then add it into array
if(obj[a] === 1) ac.push(+a)
return ac;
},)
console.log(res)
nice appreciate that, that 2nd one looks crazy. I'm assuming the time complexity for would be less than ideal compared to other results?
– mph85
2 days ago
@mph85 Yes its a little complex because it doesnot go through the array again and again instead it just store all the result obj and then filter it.Its better regarding performance
– Maheer Ali
2 days ago
could you remind me why we need thespread operator
? what happens if we don't have it? @Maheer Ali
– mph85
2 days ago
Is it because if we don't have it, it'll just log an object?
– mph85
2 days ago
@mph85 No if we will not have it. We will have aSet()
inside array. We use it convertSet()
toArray
– Maheer Ali
2 days ago
|
show 1 more comment
For the first part you can use Set()
and Spread Syntax to remove duplicates.
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = [...new Set(arr)]
console.log(res)
For the second part you can use reduce()
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
//to get the object with count of each number in array.
let obj = arr.reduce((ac,a) => {
//check if number doesnot occur before then set its count to 1
if(!ac[a]) ac[a] = 1;
//if number is already in object increase its count
else ac[a]++;
return ac;
},{})
//Using reduce on all the keys of object means all numbers.
let res = Object.keys(obj).reduce((ac,a) => {
//check if count of current number 'a' is `1` in the above object then add it into array
if(obj[a] === 1) ac.push(+a)
return ac;
},)
console.log(res)
nice appreciate that, that 2nd one looks crazy. I'm assuming the time complexity for would be less than ideal compared to other results?
– mph85
2 days ago
@mph85 Yes its a little complex because it doesnot go through the array again and again instead it just store all the result obj and then filter it.Its better regarding performance
– Maheer Ali
2 days ago
could you remind me why we need thespread operator
? what happens if we don't have it? @Maheer Ali
– mph85
2 days ago
Is it because if we don't have it, it'll just log an object?
– mph85
2 days ago
@mph85 No if we will not have it. We will have aSet()
inside array. We use it convertSet()
toArray
– Maheer Ali
2 days ago
|
show 1 more comment
For the first part you can use Set()
and Spread Syntax to remove duplicates.
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = [...new Set(arr)]
console.log(res)
For the second part you can use reduce()
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
//to get the object with count of each number in array.
let obj = arr.reduce((ac,a) => {
//check if number doesnot occur before then set its count to 1
if(!ac[a]) ac[a] = 1;
//if number is already in object increase its count
else ac[a]++;
return ac;
},{})
//Using reduce on all the keys of object means all numbers.
let res = Object.keys(obj).reduce((ac,a) => {
//check if count of current number 'a' is `1` in the above object then add it into array
if(obj[a] === 1) ac.push(+a)
return ac;
},)
console.log(res)
For the first part you can use Set()
and Spread Syntax to remove duplicates.
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = [...new Set(arr)]
console.log(res)
For the second part you can use reduce()
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
//to get the object with count of each number in array.
let obj = arr.reduce((ac,a) => {
//check if number doesnot occur before then set its count to 1
if(!ac[a]) ac[a] = 1;
//if number is already in object increase its count
else ac[a]++;
return ac;
},{})
//Using reduce on all the keys of object means all numbers.
let res = Object.keys(obj).reduce((ac,a) => {
//check if count of current number 'a' is `1` in the above object then add it into array
if(obj[a] === 1) ac.push(+a)
return ac;
},)
console.log(res)
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = [...new Set(arr)]
console.log(res)
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let res = [...new Set(arr)]
console.log(res)
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
//to get the object with count of each number in array.
let obj = arr.reduce((ac,a) => {
//check if number doesnot occur before then set its count to 1
if(!ac[a]) ac[a] = 1;
//if number is already in object increase its count
else ac[a]++;
return ac;
},{})
//Using reduce on all the keys of object means all numbers.
let res = Object.keys(obj).reduce((ac,a) => {
//check if count of current number 'a' is `1` in the above object then add it into array
if(obj[a] === 1) ac.push(+a)
return ac;
},)
console.log(res)
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
//to get the object with count of each number in array.
let obj = arr.reduce((ac,a) => {
//check if number doesnot occur before then set its count to 1
if(!ac[a]) ac[a] = 1;
//if number is already in object increase its count
else ac[a]++;
return ac;
},{})
//Using reduce on all the keys of object means all numbers.
let res = Object.keys(obj).reduce((ac,a) => {
//check if count of current number 'a' is `1` in the above object then add it into array
if(obj[a] === 1) ac.push(+a)
return ac;
},)
console.log(res)
edited 2 days ago
answered 2 days ago
Maheer AliMaheer Ali
6,963518
6,963518
nice appreciate that, that 2nd one looks crazy. I'm assuming the time complexity for would be less than ideal compared to other results?
– mph85
2 days ago
@mph85 Yes its a little complex because it doesnot go through the array again and again instead it just store all the result obj and then filter it.Its better regarding performance
– Maheer Ali
2 days ago
could you remind me why we need thespread operator
? what happens if we don't have it? @Maheer Ali
– mph85
2 days ago
Is it because if we don't have it, it'll just log an object?
– mph85
2 days ago
@mph85 No if we will not have it. We will have aSet()
inside array. We use it convertSet()
toArray
– Maheer Ali
2 days ago
|
show 1 more comment
nice appreciate that, that 2nd one looks crazy. I'm assuming the time complexity for would be less than ideal compared to other results?
– mph85
2 days ago
@mph85 Yes its a little complex because it doesnot go through the array again and again instead it just store all the result obj and then filter it.Its better regarding performance
– Maheer Ali
2 days ago
could you remind me why we need thespread operator
? what happens if we don't have it? @Maheer Ali
– mph85
2 days ago
Is it because if we don't have it, it'll just log an object?
– mph85
2 days ago
@mph85 No if we will not have it. We will have aSet()
inside array. We use it convertSet()
toArray
– Maheer Ali
2 days ago
nice appreciate that, that 2nd one looks crazy. I'm assuming the time complexity for would be less than ideal compared to other results?
– mph85
2 days ago
nice appreciate that, that 2nd one looks crazy. I'm assuming the time complexity for would be less than ideal compared to other results?
– mph85
2 days ago
@mph85 Yes its a little complex because it doesnot go through the array again and again instead it just store all the result obj and then filter it.Its better regarding performance
– Maheer Ali
2 days ago
@mph85 Yes its a little complex because it doesnot go through the array again and again instead it just store all the result obj and then filter it.Its better regarding performance
– Maheer Ali
2 days ago
could you remind me why we need the
spread operator
? what happens if we don't have it? @Maheer Ali– mph85
2 days ago
could you remind me why we need the
spread operator
? what happens if we don't have it? @Maheer Ali– mph85
2 days ago
Is it because if we don't have it, it'll just log an object?
– mph85
2 days ago
Is it because if we don't have it, it'll just log an object?
– mph85
2 days ago
@mph85 No if we will not have it. We will have a
Set()
inside array. We use it convert Set()
to Array
– Maheer Ali
2 days ago
@mph85 No if we will not have it. We will have a
Set()
inside array. We use it convert Set()
to Array
– Maheer Ali
2 days ago
|
show 1 more comment
You could sort the array before and filter the array by checking only one side for duplicates or both sides.
var array = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10],
result1,
result2;
array.sort((a, b) => a - b);
result1 = array.filter((v, i, a) => a[i - 1] !== v);
result2 = array.filter((v, i, a) => a[i - 1] !== v && a[i + 1] !== v);
console.log(...result1);
console.log(...result2)
thank for that, for theresult1
what is going on with thea[i - 1] !== v
?
– mph85
2 days ago
a
is the array,i
is the actual index, andv
is the actual value. it takes the value from the index before of the actual index and looks if the values are not equal.
– Nina Scholz
2 days ago
ah ok, and sorry, it takes thevalue from the index before of the actual index
? Not sure what you mean by that
– mph85
2 days ago
for example if you have the value9
of the array asv
, then the value before is8
.
– Nina Scholz
2 days ago
ah ok, thank you for that
– mph85
2 days ago
add a comment |
You could sort the array before and filter the array by checking only one side for duplicates or both sides.
var array = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10],
result1,
result2;
array.sort((a, b) => a - b);
result1 = array.filter((v, i, a) => a[i - 1] !== v);
result2 = array.filter((v, i, a) => a[i - 1] !== v && a[i + 1] !== v);
console.log(...result1);
console.log(...result2)
thank for that, for theresult1
what is going on with thea[i - 1] !== v
?
– mph85
2 days ago
a
is the array,i
is the actual index, andv
is the actual value. it takes the value from the index before of the actual index and looks if the values are not equal.
– Nina Scholz
2 days ago
ah ok, and sorry, it takes thevalue from the index before of the actual index
? Not sure what you mean by that
– mph85
2 days ago
for example if you have the value9
of the array asv
, then the value before is8
.
– Nina Scholz
2 days ago
ah ok, thank you for that
– mph85
2 days ago
add a comment |
You could sort the array before and filter the array by checking only one side for duplicates or both sides.
var array = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10],
result1,
result2;
array.sort((a, b) => a - b);
result1 = array.filter((v, i, a) => a[i - 1] !== v);
result2 = array.filter((v, i, a) => a[i - 1] !== v && a[i + 1] !== v);
console.log(...result1);
console.log(...result2)
You could sort the array before and filter the array by checking only one side for duplicates or both sides.
var array = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10],
result1,
result2;
array.sort((a, b) => a - b);
result1 = array.filter((v, i, a) => a[i - 1] !== v);
result2 = array.filter((v, i, a) => a[i - 1] !== v && a[i + 1] !== v);
console.log(...result1);
console.log(...result2)
var array = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10],
result1,
result2;
array.sort((a, b) => a - b);
result1 = array.filter((v, i, a) => a[i - 1] !== v);
result2 = array.filter((v, i, a) => a[i - 1] !== v && a[i + 1] !== v);
console.log(...result1);
console.log(...result2)
var array = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10],
result1,
result2;
array.sort((a, b) => a - b);
result1 = array.filter((v, i, a) => a[i - 1] !== v);
result2 = array.filter((v, i, a) => a[i - 1] !== v && a[i + 1] !== v);
console.log(...result1);
console.log(...result2)
answered 2 days ago
Nina ScholzNina Scholz
193k15104177
193k15104177
thank for that, for theresult1
what is going on with thea[i - 1] !== v
?
– mph85
2 days ago
a
is the array,i
is the actual index, andv
is the actual value. it takes the value from the index before of the actual index and looks if the values are not equal.
– Nina Scholz
2 days ago
ah ok, and sorry, it takes thevalue from the index before of the actual index
? Not sure what you mean by that
– mph85
2 days ago
for example if you have the value9
of the array asv
, then the value before is8
.
– Nina Scholz
2 days ago
ah ok, thank you for that
– mph85
2 days ago
add a comment |
thank for that, for theresult1
what is going on with thea[i - 1] !== v
?
– mph85
2 days ago
a
is the array,i
is the actual index, andv
is the actual value. it takes the value from the index before of the actual index and looks if the values are not equal.
– Nina Scholz
2 days ago
ah ok, and sorry, it takes thevalue from the index before of the actual index
? Not sure what you mean by that
– mph85
2 days ago
for example if you have the value9
of the array asv
, then the value before is8
.
– Nina Scholz
2 days ago
ah ok, thank you for that
– mph85
2 days ago
thank for that, for the
result1
what is going on with the a[i - 1] !== v
?– mph85
2 days ago
thank for that, for the
result1
what is going on with the a[i - 1] !== v
?– mph85
2 days ago
a
is the array, i
is the actual index, and v
is the actual value. it takes the value from the index before of the actual index and looks if the values are not equal.– Nina Scholz
2 days ago
a
is the array, i
is the actual index, and v
is the actual value. it takes the value from the index before of the actual index and looks if the values are not equal.– Nina Scholz
2 days ago
ah ok, and sorry, it takes the
value from the index before of the actual index
? Not sure what you mean by that– mph85
2 days ago
ah ok, and sorry, it takes the
value from the index before of the actual index
? Not sure what you mean by that– mph85
2 days ago
for example if you have the value
9
of the array as v
, then the value before is 8
.– Nina Scholz
2 days ago
for example if you have the value
9
of the array as v
, then the value before is 8
.– Nina Scholz
2 days ago
ah ok, thank you for that
– mph85
2 days ago
ah ok, thank you for that
– mph85
2 days ago
add a comment |
You can create both arrays in One Go
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let unique = new Set();
let repeated = Array.from(arr.reduce((acc, curr) => {
acc.has(curr) ? unique.delete(curr) : acc.add(curr) && unique.add(curr);
return acc;
}, new Set()));
console.log(Array.from(unique))
console.log(repeated)
1
Nice one mate +1
– Maheer Ali
2 days ago
I wonder if the ternary plus&&
could be unclear though (x?y:z&&w
)? It's not obvious to me how JS's order of operations would handle that, and I wonder if you could get across the same logic and reasoning by usingif/else
?
– Florrie
2 days ago
add a comment |
You can create both arrays in One Go
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let unique = new Set();
let repeated = Array.from(arr.reduce((acc, curr) => {
acc.has(curr) ? unique.delete(curr) : acc.add(curr) && unique.add(curr);
return acc;
}, new Set()));
console.log(Array.from(unique))
console.log(repeated)
1
Nice one mate +1
– Maheer Ali
2 days ago
I wonder if the ternary plus&&
could be unclear though (x?y:z&&w
)? It's not obvious to me how JS's order of operations would handle that, and I wonder if you could get across the same logic and reasoning by usingif/else
?
– Florrie
2 days ago
add a comment |
You can create both arrays in One Go
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let unique = new Set();
let repeated = Array.from(arr.reduce((acc, curr) => {
acc.has(curr) ? unique.delete(curr) : acc.add(curr) && unique.add(curr);
return acc;
}, new Set()));
console.log(Array.from(unique))
console.log(repeated)
You can create both arrays in One Go
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let unique = new Set();
let repeated = Array.from(arr.reduce((acc, curr) => {
acc.has(curr) ? unique.delete(curr) : acc.add(curr) && unique.add(curr);
return acc;
}, new Set()));
console.log(Array.from(unique))
console.log(repeated)
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let unique = new Set();
let repeated = Array.from(arr.reduce((acc, curr) => {
acc.has(curr) ? unique.delete(curr) : acc.add(curr) && unique.add(curr);
return acc;
}, new Set()));
console.log(Array.from(unique))
console.log(repeated)
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
let unique = new Set();
let repeated = Array.from(arr.reduce((acc, curr) => {
acc.has(curr) ? unique.delete(curr) : acc.add(curr) && unique.add(curr);
return acc;
}, new Set()));
console.log(Array.from(unique))
console.log(repeated)
answered 2 days ago
AZ_AZ_
598210
598210
1
Nice one mate +1
– Maheer Ali
2 days ago
I wonder if the ternary plus&&
could be unclear though (x?y:z&&w
)? It's not obvious to me how JS's order of operations would handle that, and I wonder if you could get across the same logic and reasoning by usingif/else
?
– Florrie
2 days ago
add a comment |
1
Nice one mate +1
– Maheer Ali
2 days ago
I wonder if the ternary plus&&
could be unclear though (x?y:z&&w
)? It's not obvious to me how JS's order of operations would handle that, and I wonder if you could get across the same logic and reasoning by usingif/else
?
– Florrie
2 days ago
1
1
Nice one mate +1
– Maheer Ali
2 days ago
Nice one mate +1
– Maheer Ali
2 days ago
I wonder if the ternary plus
&&
could be unclear though (x?y:z&&w
)? It's not obvious to me how JS's order of operations would handle that, and I wonder if you could get across the same logic and reasoning by using if/else
?– Florrie
2 days ago
I wonder if the ternary plus
&&
could be unclear though (x?y:z&&w
)? It's not obvious to me how JS's order of operations would handle that, and I wonder if you could get across the same logic and reasoning by using if/else
?– Florrie
2 days ago
add a comment |
You can use Array.prototype.reduce() create a hash
object where the keys
are the numbers in the array and the values
are going to be the the repeated occurrence of numbers in the arr
array variable..
Then using Object.keys():
- Remove all duplicates
Object.keys(hash)
- Remove all duplicates but filtering with Array.prototype.filter() to get the numbers with only one occurrence
Code:
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const hash = arr.reduce((a, c) => (a[c] = (a[c] || 0) + 1, a), {});
// [1, 2, 3, 4, 5, 8, 9, 10];
const finalResultOne = Object.keys(hash);
// [1, 9, 10];
const finalResultTwo = Object.keys(hash).filter(k => hash[k] === 1);
console.log('finalResultOne:', ...finalResultOne);
console.log('finalResultTwo:', ...finalResultTwo);
add a comment |
You can use Array.prototype.reduce() create a hash
object where the keys
are the numbers in the array and the values
are going to be the the repeated occurrence of numbers in the arr
array variable..
Then using Object.keys():
- Remove all duplicates
Object.keys(hash)
- Remove all duplicates but filtering with Array.prototype.filter() to get the numbers with only one occurrence
Code:
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const hash = arr.reduce((a, c) => (a[c] = (a[c] || 0) + 1, a), {});
// [1, 2, 3, 4, 5, 8, 9, 10];
const finalResultOne = Object.keys(hash);
// [1, 9, 10];
const finalResultTwo = Object.keys(hash).filter(k => hash[k] === 1);
console.log('finalResultOne:', ...finalResultOne);
console.log('finalResultTwo:', ...finalResultTwo);
add a comment |
You can use Array.prototype.reduce() create a hash
object where the keys
are the numbers in the array and the values
are going to be the the repeated occurrence of numbers in the arr
array variable..
Then using Object.keys():
- Remove all duplicates
Object.keys(hash)
- Remove all duplicates but filtering with Array.prototype.filter() to get the numbers with only one occurrence
Code:
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const hash = arr.reduce((a, c) => (a[c] = (a[c] || 0) + 1, a), {});
// [1, 2, 3, 4, 5, 8, 9, 10];
const finalResultOne = Object.keys(hash);
// [1, 9, 10];
const finalResultTwo = Object.keys(hash).filter(k => hash[k] === 1);
console.log('finalResultOne:', ...finalResultOne);
console.log('finalResultTwo:', ...finalResultTwo);
You can use Array.prototype.reduce() create a hash
object where the keys
are the numbers in the array and the values
are going to be the the repeated occurrence of numbers in the arr
array variable..
Then using Object.keys():
- Remove all duplicates
Object.keys(hash)
- Remove all duplicates but filtering with Array.prototype.filter() to get the numbers with only one occurrence
Code:
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const hash = arr.reduce((a, c) => (a[c] = (a[c] || 0) + 1, a), {});
// [1, 2, 3, 4, 5, 8, 9, 10];
const finalResultOne = Object.keys(hash);
// [1, 9, 10];
const finalResultTwo = Object.keys(hash).filter(k => hash[k] === 1);
console.log('finalResultOne:', ...finalResultOne);
console.log('finalResultTwo:', ...finalResultTwo);
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const hash = arr.reduce((a, c) => (a[c] = (a[c] || 0) + 1, a), {});
// [1, 2, 3, 4, 5, 8, 9, 10];
const finalResultOne = Object.keys(hash);
// [1, 9, 10];
const finalResultTwo = Object.keys(hash).filter(k => hash[k] === 1);
console.log('finalResultOne:', ...finalResultOne);
console.log('finalResultTwo:', ...finalResultTwo);
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const hash = arr.reduce((a, c) => (a[c] = (a[c] || 0) + 1, a), {});
// [1, 2, 3, 4, 5, 8, 9, 10];
const finalResultOne = Object.keys(hash);
// [1, 9, 10];
const finalResultTwo = Object.keys(hash).filter(k => hash[k] === 1);
console.log('finalResultOne:', ...finalResultOne);
console.log('finalResultTwo:', ...finalResultTwo);
edited 2 days ago
answered 2 days ago
Yosvel QuinteroYosvel Quintero
11.8k42531
11.8k42531
add a comment |
add a comment |
You can use closure
and Map
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const build = ar => {
const mapObj = ar.reduce((acc, e) => {
acc.has(e) ? acc.set(e, true) : acc.set(e, false)
return acc
}, new Map())
return function(hasDup = true) {
if(hasDup) return [...mapObj.keys()]
else return [...mapObj].filter(([key, val]) => !val).map(([k, v])=> k)
}
}
const getArr = build(arr)
console.log(getArr())
console.log(getArr(false))
add a comment |
You can use closure
and Map
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const build = ar => {
const mapObj = ar.reduce((acc, e) => {
acc.has(e) ? acc.set(e, true) : acc.set(e, false)
return acc
}, new Map())
return function(hasDup = true) {
if(hasDup) return [...mapObj.keys()]
else return [...mapObj].filter(([key, val]) => !val).map(([k, v])=> k)
}
}
const getArr = build(arr)
console.log(getArr())
console.log(getArr(false))
add a comment |
You can use closure
and Map
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const build = ar => {
const mapObj = ar.reduce((acc, e) => {
acc.has(e) ? acc.set(e, true) : acc.set(e, false)
return acc
}, new Map())
return function(hasDup = true) {
if(hasDup) return [...mapObj.keys()]
else return [...mapObj].filter(([key, val]) => !val).map(([k, v])=> k)
}
}
const getArr = build(arr)
console.log(getArr())
console.log(getArr(false))
You can use closure
and Map
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const build = ar => {
const mapObj = ar.reduce((acc, e) => {
acc.has(e) ? acc.set(e, true) : acc.set(e, false)
return acc
}, new Map())
return function(hasDup = true) {
if(hasDup) return [...mapObj.keys()]
else return [...mapObj].filter(([key, val]) => !val).map(([k, v])=> k)
}
}
const getArr = build(arr)
console.log(getArr())
console.log(getArr(false))
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const build = ar => {
const mapObj = ar.reduce((acc, e) => {
acc.has(e) ? acc.set(e, true) : acc.set(e, false)
return acc
}, new Map())
return function(hasDup = true) {
if(hasDup) return [...mapObj.keys()]
else return [...mapObj].filter(([key, val]) => !val).map(([k, v])=> k)
}
}
const getArr = build(arr)
console.log(getArr())
console.log(getArr(false))
let arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const build = ar => {
const mapObj = ar.reduce((acc, e) => {
acc.has(e) ? acc.set(e, true) : acc.set(e, false)
return acc
}, new Map())
return function(hasDup = true) {
if(hasDup) return [...mapObj.keys()]
else return [...mapObj].filter(([key, val]) => !val).map(([k, v])=> k)
}
}
const getArr = build(arr)
console.log(getArr())
console.log(getArr(false))
answered 2 days ago
birdbird
997620
997620
add a comment |
add a comment |
As many other have said, the first one is just [...new Set(arr)]
For the second, just filter out those that occur more than once:
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const count = (arr, e) => arr.filter(n => n == e).length
const unique = arr => arr.filter(e => count(arr, e) < 2)
console.log(unique(arr));
add a comment |
As many other have said, the first one is just [...new Set(arr)]
For the second, just filter out those that occur more than once:
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const count = (arr, e) => arr.filter(n => n == e).length
const unique = arr => arr.filter(e => count(arr, e) < 2)
console.log(unique(arr));
add a comment |
As many other have said, the first one is just [...new Set(arr)]
For the second, just filter out those that occur more than once:
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const count = (arr, e) => arr.filter(n => n == e).length
const unique = arr => arr.filter(e => count(arr, e) < 2)
console.log(unique(arr));
As many other have said, the first one is just [...new Set(arr)]
For the second, just filter out those that occur more than once:
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const count = (arr, e) => arr.filter(n => n == e).length
const unique = arr => arr.filter(e => count(arr, e) < 2)
console.log(unique(arr));
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const count = (arr, e) => arr.filter(n => n == e).length
const unique = arr => arr.filter(e => count(arr, e) < 2)
console.log(unique(arr));
const arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
const count = (arr, e) => arr.filter(n => n == e).length
const unique = arr => arr.filter(e => count(arr, e) < 2)
console.log(unique(arr));
answered 2 days ago
JollyJokerJollyJoker
21115
21115
add a comment |
add a comment |
var arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
var map = {};
var finalResult = ;
for (var i = 0; i < arr.length; i++) {
if (!map.hasOwnProperty(arr[i])) {
map[arr[i]] = true;
finalResult.push(arr[i]);
}
}
//if you need it sorted otherwise it will be in order
finalResult.sort(function(a, b) {
return a - b
});
console.log(finalResult);
add a comment |
var arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
var map = {};
var finalResult = ;
for (var i = 0; i < arr.length; i++) {
if (!map.hasOwnProperty(arr[i])) {
map[arr[i]] = true;
finalResult.push(arr[i]);
}
}
//if you need it sorted otherwise it will be in order
finalResult.sort(function(a, b) {
return a - b
});
console.log(finalResult);
add a comment |
var arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
var map = {};
var finalResult = ;
for (var i = 0; i < arr.length; i++) {
if (!map.hasOwnProperty(arr[i])) {
map[arr[i]] = true;
finalResult.push(arr[i]);
}
}
//if you need it sorted otherwise it will be in order
finalResult.sort(function(a, b) {
return a - b
});
console.log(finalResult);
var arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
var map = {};
var finalResult = ;
for (var i = 0; i < arr.length; i++) {
if (!map.hasOwnProperty(arr[i])) {
map[arr[i]] = true;
finalResult.push(arr[i]);
}
}
//if you need it sorted otherwise it will be in order
finalResult.sort(function(a, b) {
return a - b
});
console.log(finalResult);
var arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
var map = {};
var finalResult = ;
for (var i = 0; i < arr.length; i++) {
if (!map.hasOwnProperty(arr[i])) {
map[arr[i]] = true;
finalResult.push(arr[i]);
}
}
//if you need it sorted otherwise it will be in order
finalResult.sort(function(a, b) {
return a - b
});
console.log(finalResult);
var arr = [1, 2, 4, 2, 3, 3, 4, 5, 5, 5, 8, 8, 9, 10];
var map = {};
var finalResult = ;
for (var i = 0; i < arr.length; i++) {
if (!map.hasOwnProperty(arr[i])) {
map[arr[i]] = true;
finalResult.push(arr[i]);
}
}
//if you need it sorted otherwise it will be in order
finalResult.sort(function(a, b) {
return a - b
});
console.log(finalResult);
edited 14 hours ago
demo
2,38433984
2,38433984
answered 2 days ago
JanspeedJanspeed
1,3381315
1,3381315
add a comment |
add a comment |
If you're using lodash, you can use
_.uniq()
– BlueRaja - Danny Pflughoeft
2 days ago
1
Further, this is asking for the inverse of Get all non-unique values (i.e.: duplicate/more than one occurrence) in an array. Finally, this post is asking two separate questions and both have good answers elsewhere already.
– Søren D. Ptæus
2 days ago
To answer the question "which one is it" in a comment-answer: if you're asked to remove duplicates, I believe you should understand the first variant. The second variant removes all element that have duplicates, meaning the "original" value AND its duplicates.
– Pierre Arlaud
2 days ago