Javascript - Remove duplicate arrays from a set
I have an array of arrays.
let myArr = [[1,2,3],[1,2,3],[3,4,5],[5,6,7],[5,6,7]];
I want to filter all repeating arrays in myArr
so it stores only unique ones:
let myArr = [[1,2,3],[3,4,5],[5,6,7]];
I thought that by converting myArr
into a set it would clear all 'duplicate' values, however, it did not:
let mySet = new Set(myArr);
// Set is: {[1,2,3],[1,2,3],[3,4,5],[5,6,7],[5,6,7]}
How can I properly filter myArr
to hold only unique elements?
javascript arrays duplicates set
add a comment |
I have an array of arrays.
let myArr = [[1,2,3],[1,2,3],[3,4,5],[5,6,7],[5,6,7]];
I want to filter all repeating arrays in myArr
so it stores only unique ones:
let myArr = [[1,2,3],[3,4,5],[5,6,7]];
I thought that by converting myArr
into a set it would clear all 'duplicate' values, however, it did not:
let mySet = new Set(myArr);
// Set is: {[1,2,3],[1,2,3],[3,4,5],[5,6,7],[5,6,7]}
How can I properly filter myArr
to hold only unique elements?
javascript arrays duplicates set
1
equality for arrays is not well defined, for example, are these "equal":[1,2,3] vs [1,,2,,3]
? Or[1,"2"] vs ["1",2]
?
– georg
Nov 21 '18 at 21:06
add a comment |
I have an array of arrays.
let myArr = [[1,2,3],[1,2,3],[3,4,5],[5,6,7],[5,6,7]];
I want to filter all repeating arrays in myArr
so it stores only unique ones:
let myArr = [[1,2,3],[3,4,5],[5,6,7]];
I thought that by converting myArr
into a set it would clear all 'duplicate' values, however, it did not:
let mySet = new Set(myArr);
// Set is: {[1,2,3],[1,2,3],[3,4,5],[5,6,7],[5,6,7]}
How can I properly filter myArr
to hold only unique elements?
javascript arrays duplicates set
I have an array of arrays.
let myArr = [[1,2,3],[1,2,3],[3,4,5],[5,6,7],[5,6,7]];
I want to filter all repeating arrays in myArr
so it stores only unique ones:
let myArr = [[1,2,3],[3,4,5],[5,6,7]];
I thought that by converting myArr
into a set it would clear all 'duplicate' values, however, it did not:
let mySet = new Set(myArr);
// Set is: {[1,2,3],[1,2,3],[3,4,5],[5,6,7],[5,6,7]}
How can I properly filter myArr
to hold only unique elements?
javascript arrays duplicates set
javascript arrays duplicates set
asked Nov 21 '18 at 20:51
EDJEDJ
193215
193215
1
equality for arrays is not well defined, for example, are these "equal":[1,2,3] vs [1,,2,,3]
? Or[1,"2"] vs ["1",2]
?
– georg
Nov 21 '18 at 21:06
add a comment |
1
equality for arrays is not well defined, for example, are these "equal":[1,2,3] vs [1,,2,,3]
? Or[1,"2"] vs ["1",2]
?
– georg
Nov 21 '18 at 21:06
1
1
equality for arrays is not well defined, for example, are these "equal":
[1,2,3] vs [1,,2,,3]
? Or [1,"2"] vs ["1",2]
?– georg
Nov 21 '18 at 21:06
equality for arrays is not well defined, for example, are these "equal":
[1,2,3] vs [1,,2,,3]
? Or [1,"2"] vs ["1",2]
?– georg
Nov 21 '18 at 21:06
add a comment |
4 Answers
4
active
oldest
votes
You could take stringed arrays as value for the set and map then the arrays back.
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = Array.from(
new Set(array.map(a => JSON.stringify(a))),
json => JSON.parse(json)
);
console.log(unique);
If you need the original arrays, then you could filter with a Set
.
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = array.filter(
(s => a => (j => !s.has(j) || s.set(j))(JSON.stringify(a)))
(new Set)
);
console.log(unique);
add a comment |
You can use JSON to identify duplicates in a set and keep only the unique arrays in your list.
const elem_sets = new Set();
const result = arr.filter(item => !elem_sets.has(JSON.stringify(item)) ? elem_sets.add(JSON.stringify(item)) : false);
console.log(result);
add a comment |
Try this:
function remove(myArr) {
let s = new Set(myArr);
let it = s.values();
return Array.from(it);
}
add a comment |
You can also solve this with a single Array.reduce
where you group on the Array.toString()
:
const data = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]]
const r = Object.values(data.reduce((r,c) => (r[c.toString()] = c, r), {}))
console.log(r)
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53420290%2fjavascript-remove-duplicate-arrays-from-a-set%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
You could take stringed arrays as value for the set and map then the arrays back.
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = Array.from(
new Set(array.map(a => JSON.stringify(a))),
json => JSON.parse(json)
);
console.log(unique);
If you need the original arrays, then you could filter with a Set
.
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = array.filter(
(s => a => (j => !s.has(j) || s.set(j))(JSON.stringify(a)))
(new Set)
);
console.log(unique);
add a comment |
You could take stringed arrays as value for the set and map then the arrays back.
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = Array.from(
new Set(array.map(a => JSON.stringify(a))),
json => JSON.parse(json)
);
console.log(unique);
If you need the original arrays, then you could filter with a Set
.
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = array.filter(
(s => a => (j => !s.has(j) || s.set(j))(JSON.stringify(a)))
(new Set)
);
console.log(unique);
add a comment |
You could take stringed arrays as value for the set and map then the arrays back.
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = Array.from(
new Set(array.map(a => JSON.stringify(a))),
json => JSON.parse(json)
);
console.log(unique);
If you need the original arrays, then you could filter with a Set
.
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = array.filter(
(s => a => (j => !s.has(j) || s.set(j))(JSON.stringify(a)))
(new Set)
);
console.log(unique);
You could take stringed arrays as value for the set and map then the arrays back.
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = Array.from(
new Set(array.map(a => JSON.stringify(a))),
json => JSON.parse(json)
);
console.log(unique);
If you need the original arrays, then you could filter with a Set
.
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = array.filter(
(s => a => (j => !s.has(j) || s.set(j))(JSON.stringify(a)))
(new Set)
);
console.log(unique);
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = Array.from(
new Set(array.map(a => JSON.stringify(a))),
json => JSON.parse(json)
);
console.log(unique);
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = Array.from(
new Set(array.map(a => JSON.stringify(a))),
json => JSON.parse(json)
);
console.log(unique);
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = array.filter(
(s => a => (j => !s.has(j) || s.set(j))(JSON.stringify(a)))
(new Set)
);
console.log(unique);
var array = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]],
unique = array.filter(
(s => a => (j => !s.has(j) || s.set(j))(JSON.stringify(a)))
(new Set)
);
console.log(unique);
answered Nov 21 '18 at 20:54
Nina ScholzNina Scholz
193k15107178
193k15107178
add a comment |
add a comment |
You can use JSON to identify duplicates in a set and keep only the unique arrays in your list.
const elem_sets = new Set();
const result = arr.filter(item => !elem_sets.has(JSON.stringify(item)) ? elem_sets.add(JSON.stringify(item)) : false);
console.log(result);
add a comment |
You can use JSON to identify duplicates in a set and keep only the unique arrays in your list.
const elem_sets = new Set();
const result = arr.filter(item => !elem_sets.has(JSON.stringify(item)) ? elem_sets.add(JSON.stringify(item)) : false);
console.log(result);
add a comment |
You can use JSON to identify duplicates in a set and keep only the unique arrays in your list.
const elem_sets = new Set();
const result = arr.filter(item => !elem_sets.has(JSON.stringify(item)) ? elem_sets.add(JSON.stringify(item)) : false);
console.log(result);
You can use JSON to identify duplicates in a set and keep only the unique arrays in your list.
const elem_sets = new Set();
const result = arr.filter(item => !elem_sets.has(JSON.stringify(item)) ? elem_sets.add(JSON.stringify(item)) : false);
console.log(result);
answered Nov 21 '18 at 20:58
nitrodmrnitrodmr
16316
16316
add a comment |
add a comment |
Try this:
function remove(myArr) {
let s = new Set(myArr);
let it = s.values();
return Array.from(it);
}
add a comment |
Try this:
function remove(myArr) {
let s = new Set(myArr);
let it = s.values();
return Array.from(it);
}
add a comment |
Try this:
function remove(myArr) {
let s = new Set(myArr);
let it = s.values();
return Array.from(it);
}
Try this:
function remove(myArr) {
let s = new Set(myArr);
let it = s.values();
return Array.from(it);
}
answered Nov 21 '18 at 20:55
AkramAkram
60231324
60231324
add a comment |
add a comment |
You can also solve this with a single Array.reduce
where you group on the Array.toString()
:
const data = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]]
const r = Object.values(data.reduce((r,c) => (r[c.toString()] = c, r), {}))
console.log(r)
add a comment |
You can also solve this with a single Array.reduce
where you group on the Array.toString()
:
const data = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]]
const r = Object.values(data.reduce((r,c) => (r[c.toString()] = c, r), {}))
console.log(r)
add a comment |
You can also solve this with a single Array.reduce
where you group on the Array.toString()
:
const data = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]]
const r = Object.values(data.reduce((r,c) => (r[c.toString()] = c, r), {}))
console.log(r)
You can also solve this with a single Array.reduce
where you group on the Array.toString()
:
const data = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]]
const r = Object.values(data.reduce((r,c) => (r[c.toString()] = c, r), {}))
console.log(r)
const data = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]]
const r = Object.values(data.reduce((r,c) => (r[c.toString()] = c, r), {}))
console.log(r)
const data = [[1, 2, 3], [1, 2, 3], [3, 4, 5], [5, 6, 7], [5, 6, 7]]
const r = Object.values(data.reduce((r,c) => (r[c.toString()] = c, r), {}))
console.log(r)
edited Nov 21 '18 at 21:33
answered Nov 21 '18 at 21:27
AkrionAkrion
9,54011224
9,54011224
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53420290%2fjavascript-remove-duplicate-arrays-from-a-set%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
equality for arrays is not well defined, for example, are these "equal":
[1,2,3] vs [1,,2,,3]
? Or[1,"2"] vs ["1",2]
?– georg
Nov 21 '18 at 21:06