From df72d187e1469c87d942956e9705e6d0c265c77e Mon Sep 17 00:00:00 2001 From: "Michael (mcm)" Date: Fri, 17 Sep 2021 08:48:12 +0000 Subject: [PATCH] [IMP] web: add "unique" array utility function This commit adds "unique" array utility function which returns a copy of the given array but without any duplicates. closes odoo/odoo#76472 Related: odoo/enterprise#20833 Signed-off-by: Aaron Bohy (aab) --- addons/web/static/src/core/utils/arrays.js | 12 ++++++++++++ addons/web/static/tests/core/utils/arrays_tests.js | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/core/utils/arrays.js b/addons/web/static/src/core/utils/arrays.js index f44326f3e9d..ded0b886d4a 100644 --- a/addons/web/static/src/core/utils/arrays.js +++ b/addons/web/static/src/core/utils/arrays.js @@ -154,3 +154,15 @@ export function sections(array) { } return sections; } + +/** + * Returns an array containing all elements of the given + * array but without duplicates. + * + * @template T + * @param {T[]} array + * @returns {T[]} + */ +export function unique(array) { + return Array.from(new Set(array)); +} diff --git a/addons/web/static/tests/core/utils/arrays_tests.js b/addons/web/static/tests/core/utils/arrays_tests.js index 6a5fd1f12a0..7a52bc13483 100644 --- a/addons/web/static/tests/core/utils/arrays_tests.js +++ b/addons/web/static/tests/core/utils/arrays_tests.js @@ -1,6 +1,6 @@ /** @odoo-module **/ -import { cartesian, groupBy, sortBy } from "@web/core/utils/arrays"; +import { cartesian, groupBy, sortBy, unique } from "@web/core/utils/arrays"; QUnit.module("utils", () => { QUnit.module("Arrays"); @@ -220,4 +220,9 @@ QUnit.module("utils", () => { QUnit.test("cartesian product of four arrays", function (assert) { assert.deepEqual(cartesian([1], [2], [3], [4]), [[1, 2, 3, 4]]); }); + + QUnit.test("unique array", function (assert) { + assert.deepEqual(unique([1, 2, 3, 2, 4, 3, 1, 4]), [1, 2, 3, 4]); + assert.deepEqual(unique("a d c a b c d b".split(" ")), "a d c b".split(" ")); + }); });